[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 08/31 01:22 / Filesize : 264 KB / Number-of Response : 1016
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build123



1 名前:デフォルトの名無しさん mailto:sageteoff [2016/10/08(土) 12:33:02.29 ID:0jaJMPXG.net]
Win32APIについての質問はこちらへどうぞ。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
 英語版( msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

■過去スレ
Win32API質問箱 Build122
echo.2ch.net/test/read.cgi/tech/1451988219/

313 名前:デフォルトの名無しさん mailto:sage [2016/12/23(金) 15:54:43.63 ID:Kb3OsEli.net]
目的次第だがShellProcは違うんじゃないか
explorer.exeに対してShellExecuteあたりのフックか?

314 名前:デフォルトの名無しさん [2016/12/23(金) 15:59:09.98 ID:5tPECy1o.net]
>>305
proxy arp

315 名前:305 mailto:sage [2016/12/23(金) 16:14:48.81 ID:sqLqmtwC.net]
>>305, 306

レスありがとうございます。
DLL注入やアタッチのよるDNS改ざんは確かにできそうですね。
検討してみます。

ちなみに、プロセスは基本的には chrome です。


>>307

できればフィルタードライバの設計を、おおざっぱでもいいので教えて頂けませんか?
(ドライバのコーディングは、ほぼ経験が無く、ネットワークそのものの知識はあるものの、windows内部での扱いやAPIはまったく知識が無いです)

ちなみに、VPNによる仮想アダプタと、複数のネットワークカード(アダプタ)があるのですが、それでも対応可能でしょうか?
(直感的には、特定アダプタに対するフィルターだと、アダプタの優先度に左右されそう。アダプタ依存にはしたくないです)

316 名前:デフォルトの名無しさん mailto:sage [2016/12/23(金) 16:17:28.56 ID:gpKoKuI/.net]
>>304
解決しました。
どうもありがとうございました。

317 名前:デフォルトの名無しさん mailto:sage [2016/12/23(金) 16:45:40.87 ID:Kb3OsEli.net]
>>311
WDKサンプルのこのあたりが参考になるのかな
NDIS 6.0 Filter Driver
Windows Filtering Platform Packet Modification Sample

318 名前:デフォルトの名無しさん mailto:sage [2016/12/24(土) 07:41:05.18 ID:AXa0yhpU.net]
>>313
ありがとうございます。参考にさせて頂きます。

319 名前:デフォルトの名無しさん mailto:sage [2016/12/24(土) 20:58:07.38 ID:3KzFEnUI.net]
>>314
きっとおまえがやりたいことはchrome拡張でonbeforerequestいじれば解決する・・・

320 名前:デフォルトの名無しさん mailto:sage [2016/12/25(日) 22:10:16.80 ID:n7UGfNqJ.net]
iniファイルから文字列を読み込むGetPrivateProfileString()なんですが、
セミコロン以下のコメント文まで読み込んでしまいます。

コメント文は読み込まないようにできないでしょうか?
それとも自分でコメント文を削除するしかないでしょうか?

321 名前:デフォルトの名無しさん mailto:sage [2016/12/26(月) 00:55:07.08 ID:cwwyPIk6.net]
同一行にコメントはwindows的にアウト



322 名前:316 mailto:sage [2016/12/26(月) 01:06:56.36 ID:CvSBnmkv.net]
>>317
なるほど!
ありがとうございました!

323 名前:デフォルトの名無しさん mailto:sage [2016/12/26(月) 08:40:18.91 ID:I+2Q+LPS.net]
コメントを勘違いしてるんじゃね?

324 名前:デフォルトの名無しさん mailto:sage [2016/12/26(月) 21:20:51.81 ID:SUV7MStA.net]
セミコロン付けたらコメントになるって言うけどよー
あれ実際は特別扱いなんかしてなくて、例えば
;abc=def
にしたら「;abc」って名前になるから「abc」に一致しなくなるだけじゃないかと疑ってる

325 名前:デフォルトの名無しさん mailto:sage [2016/12/26(月) 21:34:05.02 ID:sfc5Nc1U.net]
じゃあ「;abc」で試してみればよくね?

326 名前:デフォルトの名無しさん mailto:sage [2016/12/26(月) 22:12:12.96 ID:ffv778mh.net]
セミコロンは行頭にある時だけを特別扱いしているみたいだ

327 名前:316 mailto:sage [2016/12/29(木) 11:37:53.16 ID:E1SACFDz.net]
使ってるエディタが.iniの同一行コメントもコメント色に変換してくれるので、誤解してしまいました。
気を付けます。

328 名前:デフォルトの名無しさん mailto:age [2016/12/30(金) 13:34:08.58 ID:qor2kyvR.net]
winsockの関数フックしたいんですけどインポートアドレステーブル上の
ws2_32.dllの関数だけ取得できません。どうしたら?

ttp://up2.cache.kouploader.jp/koups19399.txt
このコードは
自身のロードしたDLLの関数名を列挙するだけのシンプルなものですが、
やはりwinsockの関数名だけ取得できないです。

ImageDirectoryEntryToData()の第3引数を
IMAGE_DIRECTORY_ENTRY_IATや
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORTに変えても取得できませんでした(そもそも関数がnull返してくる

329 名前:デフォルトの名無しさん mailto:sage [2016/12/30(金) 13:46:15.25 ID:ymKNG2iV.net]
WSAStartupは成功してんの?

330 名前:デフォルトの名無しさん mailto:sage [2016/12/30(金) 13:47:50.05 ID:LToUj4mC.net]
名無しだからcontinueですっ飛ばしてんだろ

331 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/12/30(金) 14:07:12.37 ID:nsN9rWIv.net]
GetLastError()を調べてみよ。



332 名前:324 mailto:sage [2016/12/30(金) 14:41:23.26 ID:qor2kyvR.net]
>>325
成功しているようです

>>326
関数名が名無しということですか?

>>327
どのタイミングでですか?


if(IMAGE_SNAP_BY_ORDINAL(pThunkData->u1.Ordinal))
winsockの関数だけこのif文が真になります。

ttp://i.imgur.com/jWNmlgm.png

デバッガでIAT覗くと、正しい関数名ではないが、2つの関数らしきもの?が表示されていて
これがWSAStartup()/WSACleanup()に対応するものだと思われます

他のDLLでは関数名が正しく表示されます。

これが、関数名が名無しということならどう対処するのかご教示頂きたいです。

海外のフォーラムの似たような質問では
ImageDirectoryEntryToData()の第3引数を
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORTに変えて成功したと書かれていたんですけどね、成功しませんでした。

333 名前:デフォルトの名無しさん mailto:sage [2016/12/30(金) 15:38:47.57 ID:LToUj4mC.net]
>>328
関数名は名前あるけど、インポートが名無し

334 名前:デフォルトの名無しさん [2016/12/30(金) 15:39:26.81 ID:Q3tvxZdg.net]
マクロというオチ

335 名前:デフォルトの名無しさん mailto:sage [2016/12/30(金) 15:40:45.50 ID:LToUj4mC.net]
対処は名前比較じゃなくてアドレス比較

336 名前:デフォルトの名無しさん mailto:sage [2016/12/30(金) 19:08:50.21 ID:qor2kyvR.net]
>>331
ヒントありがとうございました。解決しました

PIMAGE_THUNK_DATA pThunkData = (PIMAGE_THUNK_DATA)((PBYTE)hmodCaller + pImportDesc->OriginalFirstThunk);
PIMAGE_THUNK_DATA pRealThunk = (PIMAGE_THUNK_DATA)((PBYTE)hmodCaller + pImportDesc->FirstThunk);
while(pThunkData->u1.Function){
FARPROC pfnImportedFunc = (FARPROC)(pRealThunk->u1.Function);
・・・
上記のIAT上の関数アドレスと、
LoadLibrary()&GetProcAddress()で取得したwinsock関数のアドレス
を比較し一致したものを書き換えたら成功しました。

ttp://blog.techlab-xe.net/wp-content/uploads/2014/05/pe-format-import-func-list.png
これそもそも
文字列比較より
アドレス比較を用いる方法のほうが正確なやりかたですよね?

337 名前:デフォルトの名無しさん [2017/01/21(土) 17:55:42.90 ID:0py1wTB0.net]
CreateProcess関数の質問です。この関数で開いた外部プロセスを、操作しようとしたらハンドルされていない例外エラー発生したことある人いますか?

エラーメッセの
オブジェクト参照がオブジェクトインスタンスに設定されていませんの意味もいまいちわからずです。悩んでいます。

どなたかヒントをくれたら幸いですm(__)m

338 名前:デフォルトの名無しさん mailto:sage [2017/01/21(土) 18:11:33.93 ID:3w6w5xSi.net]
たぶんCreateProcessの問題じゃなくてソースコードの問題
基本的なとこをどっか間違えてると思う

339 名前:デフォルトの名無しさん mailto:sage [2017/01/21(土) 19:16:05.15 ID:RjpRPNfA.net]
前後のソース載せてみて

340 名前:デフォルトの名無しさん mailto:sage [2017/01/21(土) 20:46:43.34 ID:1cIKmUbZ.net]
>>333
まずは使ってるプログラム言語から書こうか

341 名前:デフォルトの名無しさん [2017/01/21(土) 23:19:24.15 ID:0py1wTB0.net]
>>335
>>336

HWND hwnd;
STARTUPINFO si;
BOOL boRet = 0;
DWORD dwRet = 0;

ZeroMemory(&si, sizeof(si));
ZeroMemory(&piMplab, sizeof(piMplab));
si.cb=sizeof(si);

GetStartupInfo(&si);
boRet = CreateProcess(_T(""C:\Program Files (x86)\Microchip\PICkit 3 v3\"Pickit3.exe"),NULL,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&piMplab);

CloseHandle(piMplab.hThread);
CloseHandle(piMplab.hProcess);

すみませんこんな感じですm(__)m↑



342 名前:デフォルトの名無しさん mailto:sage [2017/01/21(土) 23:24:44.47 ID:3w6w5xSi.net]
>>337
それ以外の部分、もしくは書くために変えた部分に問題があると思う

343 名前:デフォルトの名無しさん [2017/01/21(土) 23:31:13.18 ID:/qDbjX4N.net]
アクセス権か

344 名前:デフォルトの名無しさん mailto:sage [2017/01/21(土) 23:55:07.37 ID:1cIKmUbZ.net]
>>337
まずは CreatepProcess の戻り値とエラーなら GetLastError の値を確認しようか

345 名前:デフォルトの名無しさん mailto:sage [2017/01/22(日) 06:55:36.39 ID:JOxquhah.net]
_Tの中は本当にそれでいいのか

346 名前:デフォルトの名無しさん mailto:sage [2017/01/22(日) 06:58:42.28 ID:w4vCkWXB.net]
\はここに貼り付けたから崩れたのか
元のソースが1個なのか

347 名前:デフォルトの名無しさん mailto:sage [2017/01/22(日) 11:15:36.01 ID:nyEfU5To.net]
>>333
なんか.NETのエラーメッセージっぽいけど、.NETから呼び出しているの?
該当部分のソースを全部貼り付けなきゃ誰もわからないでしょ。

348 名前:デフォルトの名無しさん mailto:sage [2017/01/23(月) 08:44:04.99 ID:As9ZYPu9.net]
そもそもどっちのプロセスがエラーを出してるかすら把握できてなさそう
子プロセス呼び出しはなんとなくコピペで扱うには荷が重い

349 名前:デフォルトの名無しさん mailto:sage [2017/01/25(水) 06:02:27.98 ID:s4b0iZxC.net]
プロセスを起動して、ユーザーの入力に応答しているか確認するにはどうしたらいいでしょうか。
Process::Responding プロパティ以外の方法でお願いします。
うちの開発環境にはないので。

プロセスのウインドウを取得して、メッセージを送るくらいしか思いつかないのですが、ウィンドウがない可能性もあるし
もっとスマートな方法があればいいなと。

350 名前:デフォルトの名無しさん mailto:sage [2017/01/25(水) 07:20:09.51 ID:fntd/u0o.net]
>>345
> ユーザーの入力に応答している
をきちんと定義しないと無理でしょ

351 名前:デフォルトの名無しさん mailto:sage [2017/01/25(水) 09:04:47.86 ID:paQpH1yu.net]
ネットワークプログラミングで言う所のキープアライブ的なのを実装じゃあかんの?



352 名前:デフォルトの名無しさん mailto:sage [2017/01/25(水) 10:50:26.10 ID:SLV8VPLP.net]
>>345
WM_PAINT系のメッセージを投げて
クライアント領域が書き換わってるかどうかとか
show/hideメッセージ送って反応するかどうか見るとか

353 名前:デフォルトの名無しさん mailto:sage [2017/01/25(水) 10:51:21.94 ID:SLV8VPLP.net]
>ウィンドウがない可能性

プロセスId見て稼働率調べるかな

354 名前:デフォルトの名無しさん mailto:sage [2017/01/25(水) 10:51:49.68 ID:SLV8VPLP.net]
ああ無限ループで稼働率100%だとだめなのか

355 名前:デフォルトの名無しさん mailto:sage [2017/01/25(水) 12:52:29.97 ID:uJriqNlz.net]
WaitForInputIdle

356 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 12:01:31.08 ID:386srHJg.net]
TrayNotifyWndにアプリアイコンを追加と削除をしたいのですが、どうすればよいでしょうか?
Shell_NotifyIconの登録みたいなやつです。
Shell_NotifyIconの登録と削除右派知っています。

357 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 12:17:03.67 ID:Nq0thOwX.net]
Shell_NotifyIconでないならこれのことかな
https://msdn.microsoft.com/en-us/library/windows/desktop/cc144099(v=vs.85).aspx

358 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 13:37:19.22 ID:386srHJg.net]
>>353
情報ありがとうございます。やりたい内容と、ちょっと違います。
windows8.1/10とかだと、タスクバーが上か下にあるとき、タスクトレイの右側か左側にTrayNotifyWndに
[IME]、[タッチパネル向けのキーボード]、[通知]などが表示されていますよね?

それらの場所に、自作のアプリアイコンを作りたいのです。
スパイでみると、
通知 ハンドル 001016E キャプション 通知センター クラス TrayButton
キーボード ハンドル 0010172 キャプション タッチキーボード クラス TIPBand
IME ハンドル 0010156 キャプション 無し クラス Button
となっています。
親ハンドルからたどってクラスを見るとTrayNotifyWndとなっています。
知りたいのは、SHAppBarMessageを使ったタスクバーみたいなウインドウではありません。

359 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 13:49:49.54 ID:386srHJg.net]
googleの画像検索で googleimeとかってやると下のような画面がでますよね?
https://www.google.co.jp/search?q=googleime&biw=1280&bih=607&source=lnms&tbm=isch&sa=X&sqi=2&ved=0ahUKEwiZzey0zfDRAhUJbrwKHQ4dBuAQ_AUICCgD#imgrc=j130VRRhjR7jdM:

TrayNotifyWndでにて、設定メニュをいじっているような画面のようなプログラムを作りたいのです。

360 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 13:52:18.95 ID:89UtyOev.net]
Shell_NotifyIconで登録して、クリックされたらメニュー表示すればそれになる

361 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 14:17:43.87 ID:386srHJg.net]
>>356
一般的な、Shell_NotifyIconでタスクトレイの登録ではないです。
タスクトレイの横に登録する手続きが知りたいのです。
mozcのソースコードをgrepしたところShell_NotifyIconは使われていないようです。

comクラスとかでTrayNotifyWndに追加するような機能があるのかなぁ。。



362 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 14:36:09.97 ID:89UtyOev.net]
すまん。通知領域はその右側か盲目だった
直接CreateWindowでぶらさげちゃうとかできないかな

363 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 15:53:49.61 ID:8dKrrq5G.net]
IMEツールバーみたいにタスクトレイにドッキングしたいってこと?

364 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 16:11:08.48 ID:386srHJg.net]
>>359
機能はIMEではないですが、そんなかんじです。

365 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 18:11:54.04 ID:gbCpBU15.net]
TrayNotifyWndを親にしてCreateToolbarExで作ればいいんじゃないのかな

366 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 19:12:40.06 ID:qO0hDPsp.net]
>>357
> mozcのソースコードをgrepしたところShell_NotifyIconは使われていないようです。
ならそのソースを読めばいいんじゃね?

367 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 20:07:51.95 ID:Eu4e1EaI.net]
>>362
多分ソースは言語バーのcomクラス呼び出しだけで、実際の実装はWindows側

368 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 23:04:33.49 ID:386srHJg.net]
>>363
ざっくり調べたところ、おっしゃる通り言語バーのcom呼び出してるだけっぽかったです。
>>361
HWND hTaskBar = ::FindWindow(L"Shell_TrayWnd", NULL);
HWND hTrayNotify = ::FindWindowEx(hTaskBar, NULL, L"TrayNotifyWnd", NULL);
hButton = CreateWindowEx(0,L"button",L"@",WS_CHILD | WS_VISIBLE,0,0,48,24,hTrayNotify,0,hInst,0);
一瞬ボタンが表示されて消えましたw
登録のさせ方がたぶん違いますよね。
TBBUTTON tbButton = { 0 , 0 , TBSTATE_ENABLED , TBSTYLE_BUTTON , 0 , 0 , 0 };
SendMessage(hTrayNotify, TB_ADDBUTTONS, 1, (LPARAM)&tbButton);
なにも起こらず。。orz

369 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 23:11:43.26 ID:386srHJg.net]
HWND hTaskBar = ::FindWindow(L"Shell_TrayWnd", NULL);
HWND hTrayNotify = ::FindWindowEx(hTaskBar, NULL, L"TrayNotifyWnd", NULL);
だと、タスクトレイの内部に描画されてました。
やりたいことと違う;;

370 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 01:27:36.38 ID:3xPmzf3n.net]
>>364
親側をsubclassしてボタン用のエリア常に用意してないからじゃない?

371 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 09:17:19.56 ID:pF10NEzN.net]
>>364
TrayNotifyWndが、もしツールバーのクラスを内部で保持してたら登録できるかなーと思いついての実験でした。。
ウインドクラスTrayNotifyWndにそんな機能はなかった。うまくいかないものですね。



372 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 09:34:28.94 ID:pF10NEzN.net]
HWND hTaskBar = ::FindWindow(L"Shell_TrayWnd", NULL);
HWND hTrayNotify = ::FindWindowEx(hTaskBar, NULL, L"TrayNotifyWnd", NULL);
HWND hToolbarWindow32 = FindWindowEx(hTrayNotify, NULL, L"ToolbarWindow32", NULL);
printf("handle %p %p %p ", hTaskBar, hTrayNotify, hToolbarWindow32);
SendMessage(hToolbarWindow32, TB_ADDBUTTONS, 1, (LPARAM)&tbButton);
実験してだめだったコード。。こんな感じでした。ウインドハンドルは普通に取得は成功していたみたいなんですけどね〜

373 名前:デフォルトの名無しさん [2017/02/03(金) 11:42:55.01 ID:mwiWK7Ca.net]
指定したソフトが生きてるかフリーズしてるかを判断できるAPI教えてくださいよ

374 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 12:11:25.19 ID:oHw8NUL1.net]
メッセージ投げて帰ってくるかどうか

375 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 13:01:49.10 ID:3xPmzf3n.net]
>>368
>>364の上のコードでいいでしょ。あとはボタン用の領域作るだけでいけるよ
i.imgur.com/26zlYcY.png

376 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 14:07:18.26 ID:pF10NEzN.net]
>>371
その画像だと、ウインドウが、タスクトレイの位置にありませんか?
タスクトレイの内部にアプリアイコンを作るのであれば、Shell_NotifyIconで登録すればいいだけです。
やりたいのは、その画像でいうと、時計の右横の通知領域の右にウインド領域を追加したいのです。

377 名前:デフォルトの名無しさん [2017/02/03(金) 14:11:00.00 ID:mwiWK7Ca.net]
>>370
それだと帰ってこなかったら出した側も固まりませんか?

378 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 14:13:38.31 ID:oHw8NUL1.net]
>>373
別スレッドからメッセージ投げて、メインでスレッド監視して待機時間オーバーしたかどうかで判定するとか

379 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 14:20:41.69 ID:mwiWK7Ca.net]
>>374
なるほど。
メッセージ投げてから返答が帰るまでの待ち時間で判断するって事ですね。
ありがとうございます。さっそくやってみます。

380 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 14:22:20.52 ID:3xPmzf3n.net]
>>372
タスクトレイの左側にある隠れたアイコンを表示するための ^ ボタンの上に作ったボタンが表示されてる
ウインドウ表示位置だけの問題で期待してる通りだと思うよ
i.imgur.com/dyVnefi.png

>>373
無限ループで処理してるかもしれないから、生き死にの定義による

381 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 14:39:36.19 ID:Q4UhsfCm.net]
>>375
IsHungAppWindow



382 名前:デフォルトの名無しさん [2017/02/03(金) 15:40:26.62 ID:mwiWK7Ca.net]
>>376
今ターゲットソフトをwhile(1)で固めて
監視ソフトでPostMessageやGetWindowRectをしたら正常に帰ってきました。
while(1)だとウィンドウの移動もできたのでこれは死亡にはならないですね

>>377
そんなのあったのですね、ありがとうございます試してみます

383 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 17:34:15.41 ID:Q4UhsfCm.net]
>>378
PostMessageは相手の処理を待たないから当然。
GetWindowRectも相手のプロセスが情報を返すわけじゃないから当然。
その方法を試すならSendMessage。

>while(1)だとウィンドウの移動もできたので
コンパイラの最適化によって(無意味な)無限ループが消されているかも。

384 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 18:01:24.26 ID:Q4UhsfCm.net]
あと参考までに

SendMessageTimeout
https://msdn.microsoft.com/ja-jp/library/cc411010.aspx

385 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 18:07:05.86 ID:mwiWK7Ca.net]
>>379
失礼、PostMessageじゃなくてSendMessageでした。
while(1)はウィンドウは動かせますがフォーム自体は固まった状態でした(マウスカーソルがくるくるになります)

IsHungAppWindowで指定間隔で数回みて連続でTRUEなら落ちてると判断できそうな感じでした

しかしwhile(1)ではなく実際にどこかのDLL関数内で落ちてる場合とかにFindWindowでハンドルは取れるのでしょうか?

386 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 18:08:21.50 ID:mwiWK7Ca.net]
>>380
こんな関数あったんですね・・・
これは良い情報を頂きましたありがとうございます

387 名前:デフォルトの名無しさん mailto:sage [2017/02/04(土) 13:09:50.99 ID:koQjiQcQ.net]
メッセージ投げといてタイムアウトしたらあとは知らないって
まるで鍵垢へのフォロリクか2ちゃんの独り言のようだ

388 名前:デフォルトの名無しさん mailto:sage [2017/02/04(土) 13:21:18.26 ID:cCtqcbdk.net]
ピンポーン 宅配便でーす お留守ですかー ピンポーン ピンポーン

389 名前:デフォルトの名無しさん mailto:sage [2017/02/04(土) 15:21:09.56 ID:e9aNESBj.net]
帰りに台車を放り投げて荷物を蹴とばすんですね判ります

390 名前:デフォルトの名無しさん mailto:sage [2017/02/05(日) 11:14:06.81 ID:bZw/U4Ow.net]
使い道が想像できない

391 名前:デフォルトの名無しさん [2017/02/05(日) 19:54:32.92 ID:ajRW1B46.net]
GetWindowRectで得た値から計算して
MoveWindowに使うとズレるんですがこれは仕様なんですか?

例えばGetWindowRectで
left=100  right=200
top=100  bottom=200
だったとして、これだと幅と高さが
101になるので
MoveWindow(hwnd,100,100,101,101,TRUE)
としたら幅と高さが1ドットずつ膨らんでしまいます



392 名前:デフォルトの名無しさん mailto:sage [2017/02/05(日) 19:59:38.66 ID:lBwes1rb.net]
WindowsAPIのRect系は右と下の1ドットは含まれないはずだったが

393 名前:デフォルトの名無しさん mailto:sage [2017/02/05(日) 20:00:15.60 ID:Kv3SwlRy.net]
ピクセルの左上の隙間の位置を返す仕様(Javaと同じ)
なので単純に差を出して指定しないと膨らむ

394 名前:デフォルトの名無しさん mailto:sage [2017/02/05(日) 20:02:41.46 ID:wagcFIA6.net]
>>387
画面DPI100%以外になってない?vista以降はそれ原因で従来のAPIの扱いが面倒になってる

395 名前:デフォルトの名無しさん [2017/02/05(日) 20:05:12.27 ID:ajRW1B46.net]
MSDNを見ると
GetClientRectはleftとtopが常に0で
rightとbottomには幅と高さが入ってくると書かれていて
事実その通りになっていますが
GetWindowRectのほうは
ウインドウの左上座標と右下座標と表記されてるので
right-left+1 が幅になるはずです
なのでこの仕様はおかしいと思います

396 名前:デフォルトの名無しさん mailto:sage [2017/02/05(日) 20:08:48.13 ID:DkYFBwwC.net]
>>391
英語版みたらちゃんと書いてあったよ

ていうかこの関数に限らず
Rect構造体の定義としてbottomとrightは1ピクセル外側を示すことになってる

397 名前:デフォルトの名無しさん [2017/02/05(日) 20:19:29.52 ID:ajRW1B46.net]
オセロでなく碁盤で数えろってことですね
納得しました

398 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 11:44:22.96 ID:atuXlQHb.net]
>>392この辺ちゃんと理解してないと1ドット足りないみたいな事態になるんだよな
VBerとか1オリジンでUboundとか慣れてるとドはまりしそう

399 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 15:30:39.87 ID:sNAkUIYE.net]
>>391
GetClientRectの話だけど
left=top=0だとして
right=bottom=1だったら
幅と高さは1で
ウィンドウは(0,0)-(0,0)で1ピクセルのウィンドウだから
やっぱり幅と高さは1だし矛盾しない

400 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 16:17:17.14 ID:atuXlQHb.net]
画像の部分クリップとかやりだすとちょっと混乱したりする教訓か
ドトネトなんかではx y width heightなプロパティを別に持っている

401 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 17:51:48.08 ID:2YUAIh/k.net]
SetWindowPosとMoveWindowとで
ウィンドウを動かした時に何か違いはあるんでしょうか?
SetWindowPosでウィンドウは動かせるのに
MoveWindowは何のために用意されてるんですか?



402 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/02/06(月) 18:06:24.84 ID:myCEQNc2.net]
>>397
SetWindowPosの方がフラグ指定や挿入位置指定など、できることが多い。

403 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 08:29:41.33 ID:g0+JjgLn.net]
>>398
ではMoveWindowは何のために存在しているの

404 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 09:23:30.46 ID:mtDQmVBr.net]
フラグとか触らないでただ動かす時のため

405 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 11:23:40.44 ID:IHNU1ydF.net]
昔のことは知らないけど SetWindowPos が後から追加されたんじゃないの

406 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 11:40:48.78 ID:+LdvU0fQ.net]
理由も昔のことも知らないけど 今はMoveWindowの内部でSetWindowPosが呼ばれてたと思う

407 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 15:19:54.85 ID:LuCsRke8.net]
後方互換性のため

408 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 22:51:17.46 ID:m2J0GXa0.net]
DeferWindowPos

409 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 18:42:29.90 ID:xKxGFEhy.net]
実行ファイルの埋め込みマニフェストの実体をいじらずに
内容を修正した上で起動したり、任意の外部マニフェストファイルを読めるように
操作できませんか?
具体的には、マニフェストのcompatibilityの項目なんですが。。。

410 名前:デフォルトの名無しさん [2017/02/17(金) 19:08:12.47 ID:yGnzX63H.net]
OSのバージョンにより異なる
ttps://msdn.microsoft.com/ja-jp/library/ms235342%28VS.80%29.aspx
ttp://www.taosoftware.co.jp/blog/2008/02/windows_1.html
ttp://nekojiru.blog.so-net.ne.jp/2007-09-03

411 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 19:35:32.23 ID:xKxGFEhy.net]
Windows7以降は埋め込み優先で、
実行ファイルのマニフェスト自身を書き換える方法、レジストリでOS自体の設定をいじる方法、
ActivateActCtx()でcommctl.dllは変更できるっぽい?
ってのはわかったんですが、個別に実行ファイルをいじらずに操作する方法があるかな、と思った次第です。



412 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 19:51:35.09 ID:Z3/lG4/1.net]
ショートカット作って、そのプロパティにアクセスして、互換性編集して、そのショートカットで起動させるとか?

413 名前:デフォルトの名無しさん mailto:sage [2017/03/01(水) 19:41:47.62 ID:GhHUeiw5.net]
windows8.1/10 マルチモニター環境で、ウインドウの位置がタッチパネルデバイスを
有するモニターであるかを調べたい場合どうすればよいですか?

HMONITOR hMonitor = MonitorFromWindow(hWnd,MONITOR_DEFAULTTONEAREST);
これで、モニターのハンドルは調べられるのですが、
このモニターがタッチパネルを有するモニターを調べる場合どうすればいいかわかりません。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<264KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef