トップページ⇒tech
1001コメント293KB

Win32API 質問箱 Build9

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
スレ立てるまでもない、
   Win32 Application *Programmer* Interface
についての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
でも、質問する前に検索ぐらいしる!!
0153デフォルトの名無しさんNGNG
>>152
ああ、それです、SpecialFolderって部分はわかってたのですが
フルスペルがわからなかったもので。
ありがとうございます!
0154デフォルトの名無しさんNGNG
マウスの移動方向をAPIで取得する方法無いんでしょうか?
(DirectInput使う方法なら見つけたけど…)

前回座標との差分だと、画面端からさらにそっちに動かしたのが判らないし(汗
0155デフォルトの名無しさんNGNG
画面端まで来たら反対側にワープ。
計算どうやるの?とかいうなよ。
0156デフォルトの名無しさんNGNG
>>155
画面の一番右端にいるときにマウスを右に移動したのをどうやって判断するの?って
ことだろ。なにわけのわからんこといってんのよ?
0157デフォルトの名無しさんNGNG
spy++使ってデスクトップで試してみたけど、
特別なメッセージは流れてなかったなぁ…
0158デフォルトの名無しさんNGNG
メッセージレベルでは何も流れないだろうね。
0159デフォルトの名無しさんNGNG
諦めて、画面端の場合はその方向にマウスを動かし続けていると見なす、とか。
0160デフォルトの名無しさんNGNG
マウスドライバレベルで座標の変化を記録するしかないんじゃないの?
0161デフォルトの名無しさんNGNG
教えてください
コンボボックスの表示スピード(下に伸びてくるスピード)を早くしたいのですが可能でしょうか?
可能でしたら、どういうメッセージを送ればよいのでしょうか?

よろしくお願いします
0162デフォルトの名無しさんNGNG
LineToやTextOutで画面上に色々書いたのをけしたいのですが
現在は他のウィンドウを重ねて動かすという方法なのですが
何か良い消し方ないでしょうか?
描画させる?方法を教えて頂けませんか?
0163デフォルトの名無しさんNGNG
>>162
それがわかればおそらくいい会社に就職できるでしょう.
0164デフォルトの名無しさんNGNG
>>163
うぬぬ
もったいぶらずにお願いします
0165デフォルトの名無しさんNGNG
>>164
一旦ウィンドウを閉じる
0166デフォルトの名無しさんNGNG
デスクトップで最新の情報に更新するみたいな処理だと思うんですが
まったくわからずじまいでして、、、
お願いしますー
0167デフォルトの名無しさんNGNG
>>162
おっきな四角を作ってそれで塗りつぶす。
0168デフォルトの名無しさんNGNG
>>162
InvalidateRect, InvalidateRgn ?

>>163
???
0169デフォルトの名無しさんNGNG
>>167
そのおっきな四角を消すのはどうするのでしょう?
0170デフォルトの名無しさんNGNG
>>169
もっとおっきな四角で塗りつぶす。
0171168NGNG
>>169
もっと大きな四角を(略
0172168NGNG
省略しながら遅かった・・・(・ω・)ショボーン
0173デフォルトの名無しさんNGNG
なんかだめぽ。。。
素直に最新の情報に更新をしてます。。、
0174デフォルトの名無しさんNGNG
他アプリにメッセージ送信の仕方教えてください。

Alt + F4メッセージを送りたいのです。
API名だけでのいいんでよろしくです。
0175デフォルトの名無しさんNGNG
>>162
XORで描いた四角の真上にもう一度XORで描くと元に戻るってやつかな?
SetROP2を調べてみたまい。

>174
PostMessage
メッセージはWM_SYSCOMMANDだったっけ?
「送信」とか「送る」とかいうとSendMessageと間違うな。
0176gn355my0NGNG
>>175
微妙に違うと思う。GetClientRect()してFillRect()でいいんちゃうの?
0177デフォルトの名無しさんNGNG
>>162
SendMessage(hwnd, WM_ERASEBKGND
0178gn355my0NGNG
>>177
でもそれはちゃんと背景ブラシ設定してるかどうか。。。
ってウインドウを重ねて動かして消えるということは設定できてるってことですね。
0179デフォルトの名無しさんNGNG
>>174
SendMessage
0180デフォルトの名無しさんNGNG
多分この場合は、PostMessageの方が適切だね。
SendMessageだと、相手が応答不能な場合にこちらまで応答不能になるから。
0181デフォルトの名無しさんNGNG
消した後で何か描画させるつもりならSendじゃないと不安が残るね
それからPostではあぼ〜んされてしまうメッセージもときどきある
0182デフォルトの名無しさんNGNG
>>177>>179>>180
どーもでした。
SendMessage or PostMessageで普通に送れるんですか。
あとは、ウインドウクラス、ウインドウタイトル、実行ファイル名から
アプリ特定してHWND取得でいけるかなとおもた。

ちなみに偽メッセンジャー起動時にウインドウ開くの邪魔だったから
0183デフォルトの名無しさんNGNG
>>162
SelectObject(hdc,GetstockObject(WHITE_BRASH));
Rectangle(hdc,-1,-1,9999,9999);
0184154NGNG
>155-160
thx。
駄目ですか…。

>159
現状はカーソルが端に来たらちょっと戻すような処理?でごまかしてます。
当然カーソルの動きがぶれます(汗

>160
いや、ハード的にはマウスは座標の概念持ってなくて相対的な動きしか検出出来ないんです。
本来取れるはずの値が取れないのが不自然に思ったもので。
0185デフォルトの名無しさんNGNG
ウィンドウハンドルからGetModuleFileNameを使って
起動パスを取得したいのですがGetModuleFileNameの第一引数には
どのAPIで取得したハンドルを渡せばいいのでしょうか?

因みに知りたいのは自分の自信のパスではなくてEnumWindowsで
列挙したハンドルのパスです。
よろしくお願いします。
0186デフォルトの名無しさんNGNG
>>185
GetWindowLong ?
0187デフォルトの名無しさんNGNG
>>184
まず、ClipCursor()でスクリーンより大きい矩形を指定してカーソルが外に
出られるようにする。しかしこうしても、カーソルがスクリーンの外にあるときは
メッセージが来ないから、タイマなりでGetCursorInfo()/GetCursorPosを呼んだらどうよ。

>>185
http://216.239.33.100/search?q=cache:TwFOROT3lsoC:www.microsoft.com/japan/support/kb/articles/J041/6/32.htm+JP175030&hl=ja&ie=UTF-8&inlang=ja
0188デフォルトの名無しさんNGNG
>>185
GetModuleFileNameは自プロセス内のモジュールにしか使えない。
PSAPI(NT)かToolhelp32(9x)使え
0189デフォルトの名無しさんNGNG
>>187
何でキャッシュなの?
http://support.microsoft.com/default.aspx?scid=kb;ja;175030
0190デフォルトの名無しさんNGNG
>>182
(´-`).。oO( 偽メッセンジャーはメインウィンドウ非表示で起動できるじゃん・・・ )
0191デフォルトの名無しさんNGNG
他のアプリのツリービューの背景色(文字色も)を変更することはできますか?
SendMessageあたりでいろいろ調べてるんですけど、まだ決め手となるものが
ありません。
0192デフォルトの名無しさんNGNG
>>191
てめーのダサいデザインセンスを勝手に適用すんな。
画面のプロパティで設定するからいらん。
0193デフォルトの名無しさんNGNG
>>192
禿同。
0194162NGNG
あれからまた色々やったのですがだめでしたので、またご助言を、、
http://uniety.hp.infoseek.co.jp/mo.exe
を実行するとマウスの周りに色がぐちゃぐちゃっとなるのを消したいのです。
自分も相手もDelphiというのを使っておりまして、どうにかしたいのですが
そんなに詳しいわけでもなく知り合いに聞くとAPIとだけ言い残しただけ、、

どなたか助けて下さい。 それともDelphiのスレで聞くのがいいでしょうか
0195191NGNG
古い人間なので、エディタでもなんでも、背景色は黒でないとダメなのですが、
Windows全体をその設定にしてしまうと、いろいろと不具合が出ます。
Windowsは、黒背景で使うようにはできていません。
ある特定のアプリの一部を変更したいだけです。
0196デフォルトの名無しさんNGNG
背景が黒だと文字が見えないとか言ったりして。プププ
0197デフォルトの名無しさんNGNG
> Windowsは、黒背景で使うようにはできていません。
Windowsはできてるよ
できてないのはその糞アプリ
0198デフォルトの名無しさんNGNG
>>190
できました。
毎回毎回閉じてたのがばかみたい。
うざったいの消えていい感じ
0199デフォルトの名無しさんNGNG
>>188
ありがとう。
ウィンドウハンドルで識別するためにGetWindowThreadProcessIdでProcessIdを取得して
Process32First等で取得したth32ProcessIDと比較してIDが一致したらって
やったのですが、一致するIDがあなませんですた。比較する対象が違うのでしょうか?
0200デフォルトの名無しさんNGNG
お前のプログラムが違う
つーか>>187と>>189がせっかくリンク張ってやってるんだから読めよ
0201デフォルトの名無しさんNGNG
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS
を実行した瞬間に存在するプロセスのみが列挙されるはずですが
その辺のタイミングは大丈夫ですか?
0202デフォルトの名無しさんNGNG
それを言い出したらウィンドウだって
列挙した瞬間のものしか取り出せないわけだが
0203191NGNG
>197
一度黒背景設定でやってみてください。もちろん、文字色は明るい色で。
他社のアプリではなく、Windowsそのものの各所で、
見えなくなるところがでてきます。

ていうか、単にAPI調べてるだけなんですけど…。
0204デフォルトの名無しさんNGNG
この板でWindows自体といったらAPIレベルの話しだべ
0205デフォルトの名無しさんNGNG
>>203
Windowsの画面設定にはデフォで背景黒があったはずだが、
それもおかしくなるか?
0206デフォルトの名無しさんNGNG
>>203
ちゃんと隅々まで設定しろよ。めんどくさけりゃ「ハイコントラスト 黒」とかにしたら?
0207デフォルトの名無しさんNGNG
WNetOpenEnumでグループ名はゲットできたんですが、
そこから各コンピューター名はどうやってゲットすればいいのでしょうか?
0208デフォルトの名無しさんNGNG
ォィォィ
>>194落としたらすごい事になったぞ
タスクバーの汚れきえねーよ
0209名無し@沢村NGNG
>>199
ヌヒよ、GetWindowModuleFileName()では駄目なのか?
0210デフォルトの名無しさんNGNG
駄目
0211デフォルトの名無しさんNGNG
>>210
Why
0212デフォルトの名無しさんNGNG
MDIアプリケーション(Photoshopみたいなもの)作ってるんですけど
パレットウィンドウやブラシウィンドウのように一つしか無いウィンドウ
のハンドルはグローバル変数にしてしまうのが一番スマートな方法なのでしょうか?

画像は複数個読み込むことが出来て、画像ごとにウィンドウを作成します。
そしてアクティブな画像ウィンドウは、パレットウィンドウやブラシウィンドウと
SendMessage()で必要な情報をやり取りする、という形なのですが…
0213デフォルトの名無しさんNGNG
>>187
thx。
でも画面内にカーソルを置いたまま移動量がほしいので…
移動量だけ欲しいときはいいアイデアだと思いました。

>>194
すごいなこれ…
とりあえず最前面に画面と同じ大きさの窓を開いてすぐ閉じれば消えるかと。
0214デフォルトの名無しさんNGNG
>>212
ハンドル解放後にハンドルに対する処理したら悲惨。
0215デフォルトの名無しさんNGNG
>>211
NTではGetWindowModuleFileNameでも
他プロセスのモジュールのファイル名は取れないぽ
0216デフォルトの名無しさんNGNG
>>212

モードレス ダイアログのハンドルは
オーナー ウインドウとメッセージ ループの両方で要るからなあ。

オーナー ウインドウにハンドルを預けておいて
メッセージ ループではSendMessageの戻りでがんがるって手もあるけど、
アプリケーション ユニークなオブジェクトなら
グローバルの方がかえってきれいじゃないか?

といってもHWND変数をextern宣言するのはいやだから
ちゃんと関数で隠蔽して。
0217デフォルトの名無しさんNGNG
MAPISendMailについて教えてください。
これの4つ目の引数のflFlagsのフラグの意味がよくわかりません。
MAPI_DIALOG 、MAPI_LOGON_UI 、MAPI_NEW_SESSION
の使い分けってどういう風に行うのでしょうか?
ご存知の方がいたらご教授お願いします。
0218デフォルトの名無しさんNGNG
>>217
http://msdn.microsoft.com/library/en-us/mapi/html/_mapi1book_c_mapisendmail.asp
0219デフォルトの名無しさんNGNG
質問があります

WindowsXP上で赤外線通信を行うソフトを作ろうと
思ったのですが、どうやったら良いのでしょうか?
WinCEではIrSockを使うらしいことまでは分かったんですが・・・
XPでも同じで良いんでしょうか?

それと、WindowsXP標準の赤外線通信ソフトを無効にすることは
出来るのでしょうか?


Socket関係はあまり使ったことがなく、困っております
先達のお知恵を・・・
022086NGNG
以前>86で質問した者です。
>90
ネットが使えなかったので返事ができませんでした、すいません。
マウスをグローバルフックするDLLを作っり、ダブルクリックした場所が
テキスト入力可能な場所ならソフトウェアキーボードを立ち上げるような
プログラムを作ろうとしています。
テキスト入力可能か判断する方法が知りたいのですが。
メモ帳などのエディタだけでなくIEのアドレスバーなどでも判断できるようにしたいので
ウインドウクラスから判断するのは難しいと思うのですが。
0221デフォルトの名無しさんNGNG
>>220
事実上不可能な気もします。
0222デフォルトの名無しさんNGNG
>>220
IMEでも作るんですか?
0223217NGNG
>>218
すいません。もちろんMSDNはちゃんと見ていますが、あの説明だけではとても理解できませんでした。
もしわかるのなら教えてもらえないでしょうか?
0224220NGNG
>>222
IMEなんて代物は作れませんが、ダブルクリックで立ち上がるソフトウェアキーボードを作る感じです。

フックDLLは既に作ってますが、フォーカスイベントなどを処理すればなんとかなるのかなぁ・・・。
0225デフォルトの名無しさんNGNG
そっか、IMEにしちゃえばいいのか。
0226デフォルトの名無しさんNGNG
>>220
GetCaretPos()を実行して座標が0,0なら入力不可と仮定。
完璧じゃないけど。
0227デフォルトの名無しさんNGNG
>>226
うん、Windowsのエディット関係使ってないやつとか。
0228220NGNG
いろいろなレスありがとうございます。

IMEで調べるとImmSetOpenStatus関数が使えそうな気がしました。
IMEを開こうとして関数の戻り値が0以外ならテキスト入力可能だと判断できるような気もします。
この場合、無駄にIMEが開いてしまうという副作用もありそうですが・・・。
0229デフォルトの名無しさんNGNG
>>228
だからあなたがIMEを作るんですよ。
0230220NGNG
>>229
ああ、そういうことなんですね、やっと意味がわかりました(汗

IME作るのか、めんどくさそうな予感・・・。サンプルとか落ちてないのかな。
0231デフォルトの名無しさんNGNG
lstrcpyとかは、引数にNULLを指定しても
エラーダイアログとかワトソン博士とか出て来ないのですが
戻り値でエラーが返るだけなんでしょうか?
0232デフォルトの名無しさんNGNG
>>231
うん
0233デフォルトの名無しさんNGNG
既出だとは思いますが、

FillMemory(lpDest, lpSrc, var)の
varがBYTE型なのですが、
32ビット固定小数点型をセットできる関数をはないですか?

ループでやれば出来るんですが遅いんです…
0234デフォルトの名無しさんNGNG
既出だと思うなら探せよ
0235デフォルトの名無しさんNGNG
>>233
結局どのデータ型も突き詰めればバイトストリームだってことさ。
0236デフォルトの名無しさんNGNG
REP STOS (合ってる?
0237デフォルトの名無しさんNGNG
メモリを32ビット値で埋める?
CopyMemoryしたほうがいいんでない?
0238デフォルトの名無しさんNGNG
質問です。
HBITMAP CreateDIBSection(
HDC hdc, // handle to DC
CONST BITMAPINFO *pbmi, // bitmap data
UINT iUsage, // data type indicator
VOID **ppvBits, // bit values
HANDLE hSection, // handle to file mapping object
DWORD dwOffset // offset to bitmap bit values
);

これで*ppvBitsには確保されたメモリーのアドレスが格納されると思うのですが、
これって使い終わったら自分で解放しなきゃいけないんでしょうか?
もし解放しなきゃいけないならfreeですか?それともdelete?
0239デフォルトの名無しさんNGNG
メモリの値を16進数で取り出すにはどうしたらいいんでしょうか?
0240デフォルトの名無しさんNGNG
hSectionがNULLの場合は、 オペレーティング システムが
デバイスに依存しないビットマップのメモリを割り当てます。
後でDeleteObject関数を呼び出してデバイスに依存しない
ビットマップを削除すると、 オペレーティング システムが
そのメモリのハンドルをクローズします。

と書いてある
0241デフォルトの名無しさんNGNG
>>239
値そのものは10進だとか16進だとか関係ありません。

取ってきた値を16進で表示したいならprintfでもつかえば?
0242デフォルトの名無しさんNGNG
>>240
サンクス
今度から下の方までよく読みます
0243239NGNG
>>241
ごめんなさい、よく分からないで質問してました。
WINAPI WinMain でprintfを使うにはどうしたらいいか分かりません。
stdio.hをインクルードすればmain()がないとエラーが返されてしまいます。
どのようにしたらよろしいのでしょうか?
0244デフォルトの名無しさんNGNG
>>243
コンソールアプリケーションにすればいいよ。
0245239NGNG
>>244
ウインドウとコンソールは一緒に出来ないんですね・・・
ありがとうございました
0246デフォルトの名無しさんNGNG
引数に何も指定しなかったらウインドウで
指定したらコンソールって作れますか?
ちらっと変なウインドウとか出さずに。
0247デフォルトの名無しさんNGNG
XPならAttachConsoleでできるかも
0248デフォルトの名無しさんNGNG
>>245
できるよ
0249デフォルトの名無しさんNGNG
>>245
AllocConsole すれば コンソールが出るし
窓とコンソールの両方を出す事も出来る
0250239NGNG
やってみます、ありがとうございました
0251デフォルトの名無しさんNGNG
AllocConsoleなんかしなくても
/subsystem:consoleのアプリから余裕でウィンドウを開けますが
0252239NGNG
取り合えず、AllocConsoleでやってみたのですが、scanfを使っても勝手にDOS窓が閉じてしまいます。
解決法はないでしょうか?
■ このスレッドは過去ログ倉庫に格納されています