■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API質問箱 Build36
1 名前:東トルキスタンと言ってみるテスト :2005/10/10(月) 22:35:30
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。

  ∧_∧
 ( ´∀`) < 0x23

過去スレ、関連リンクは>>2-5くらい。

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

-前スレ
Build35:http://pc8.2ch.net/test/read.cgi/tech/1125850096/l50

2 名前:デフォルトの名無しさん :2005/10/10(月) 22:40:43
0x24じゃないの?

3 名前:デフォルトの名無しさん :2005/10/10(月) 22:49:20
-過去スレ
35 ttp://pc8.2ch.net/test/read.cgi/tech/1125850096/
34 ttp://pc8.2ch.net/test/read.cgi/tech/1122723009/
33 ttp://pc8.2ch.net/test/read.cgi/tech/1120153520/

4 名前:デフォルトの名無しさん :2005/10/10(月) 22:50:09
32 ttp://pc8.2ch.net/test/read.cgi/tech/1117271829/
31 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
30 ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
29 ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
28 ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
27 ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
26 ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
25 ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
24 ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
23 ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
22 ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
21 ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
20 ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
19 ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
18 ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
17 ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
16 ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/
15 ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/
14 ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
13 ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
12 ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
11 ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
10 ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
9 ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
8 ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
7 ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
6 ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
5 ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
4 ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
3 ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
2 ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
1 ttp://pc.2ch.net/tech/kako/991/991576947.html

5 名前:デフォルトの名無しさん :2005/10/10(月) 22:51:16
- MSDN Online
http://www.microsoft.com/japan/msdn/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com/

- WindowsR Server 2003 SP1 Platform SDK Full Download
http://www.microsoft.com/downloads/details.aspx?familyid=EBA0128F-A770-45F1-86F3-7AB010B398A3&displaylang=en
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm

Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
Win32 プログラミング入門
http://www7.plala.or.jp/keny01/windows/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/

- 書籍
Advanced Windows
http://www.amazon.co.jp/exec/obidos/ASIN/4756138055

-おまけ
dat落ちしている過去スレが見れるかも。Build19が見たい人、余裕のある人は●でも買ってやってくれ。
http://makimo.to/cgi-bin/search/search.cgi?q=Win32API&andor=AND&sf=2&H=&view=table&shw=&D=tech

6 名前:デフォルトの名無しさん :2005/10/10(月) 23:32:14
>>1
otu

7 名前:デフォルトの名無しさん :2005/10/10(月) 23:34:10
http://makimo.to/って重いし2ちゃんねるからの参照が多すぎるから
暇な奴はミラー作ってくれよな

8 名前:デフォルトの名無しさん :2005/10/10(月) 23:40:39
ttp://www.geocities.jp/mirrorhenkan/

こっち使え

9 名前:デフォルトの名無しさん :2005/10/11(火) 00:40:08
>>8
えらい力技だな

10 名前:デフォルトの名無しさん :2005/10/11(火) 00:41:33
突然ですみません。
DirectX以外の方法で、ほぼ正確に1/60毎にコールバック関数を呼ぶAPIはありますか?

いろいろ試してみたのですが、マルチメディアタイマーを使用すると、1/60秒から少しずれてしまい(整数msの分解能のため)
1/60秒での処理ができません。
これだとfpsに直すと62fps(16msの場合)になりますよね?
これをほぼ正確に60fpsにしたい場合、何か方法はないでしょうか

11 名前:デフォルトの名無しさん :2005/10/11(火) 00:43:59
>>10
QueryPerformanceCounter

12 名前:デフォルトの名無しさん :2005/10/11(火) 01:39:56
WaitVBlank

13 名前:デフォルトの名無しさん :2005/10/11(火) 02:14:30
前回との差分をとって16msと17msをいったりきたり

14 名前:デフォルトの名無しさん :2005/10/11(火) 02:38:31
SendInputでキーストロークを送るプログラムを書いてみたのですが、
いくつかのゲームでは、なぜかキーストロークを送ることができません。
どうすればいいのでしょうか?

15 名前:デフォルトの名無しさん :2005/10/11(火) 03:36:15
>>14
升ツール作りたいならゲ製板にでも逝け。

16 名前:デフォルトの名無しさん :2005/10/11(火) 03:41:53
>>14
http://game9.2ch.net/gameurawaza/

>>15
廊下に立ってろ

17 名前:デフォルトの名無しさん :2005/10/11(火) 05:00:01
非クライアント領域の無効領域ってどうやったら取得できるのでしょうか?

18 名前:デフォルトの名無しさん :2005/10/11(火) 09:45:24
Windowsのスクリーン上マウスポイントX,Yから
そこの色情報を取り出すAPIとかないでしょうか?


19 名前:デフォルトの名無しさん :2005/10/11(火) 10:02:15
デスクトップのDC使ってGetPixelすれば?

20 名前:デフォルトの名無しさん :2005/10/11(火) 10:06:04
>>19
別WindowHandleのマウスポイントの色もとりたいのです。
後、窓枠とかの色も取得したいので、出力されている色すべて取れないでしょうか?

21 名前:デフォルトの名無しさん :2005/10/11(火) 10:21:08
いやだからデスクトップの……

22 名前:デフォルトの名無しさん :2005/10/11(火) 10:53:57
>>21
hWnd=0でいけるのですねすいません。
ありがとうございます。


23 名前:デフォルトの名無しさん :2005/10/11(火) 11:26:22
RegisterHotkeyを使って、何らかの入力があったらウィンドウをアクティブにし、
Unregistしてから色々な処理をした後に非アクティブ化してから
再びRegistして入力を待つ…といった事をやっています。

が、2回目のRegisterHotkey後にキーボードを叩いても反応がありません。
確認したのは
・2回目のRegistは成功した(返り値確認)
・2回目のRegist以降はWM_HOTKEYメッセージすら届いていない

という事なんですが、RegisterHotkeyが成功してるのに
メッセージが通知されないというので悩んでます。
思い当たる原因など何かないでしょうか。

24 名前:デフォルトの名無しさん :2005/10/11(火) 16:31:16
現在Win2000SP4+VS2003にて、MFCを利用したWindowsアプリケーションを
作成しています。

その中で、リストビューの自前描画を行おうと試み、クライアント領域に関しては
オーナードローで実現できたのですが、スクロールバーはオーナードローでも
手の届かない領域です。

そこで、スクロールバー部は非クライアント領域の描画で無理やりしてるのですが、
この描画の直前に、一瞬だけコモンコントロールがデフォルトで描画している
素のスクロールバーが表示されてしまいます。

これを避けるためには、WM_SETREDRAW では効果はなく、
唯一 LockWindowUpdate だけが描画を抑制することができるようなのですが、
どうやらこの API にはバグがあるらしく、デスクトップ上の全てのウィンドウに対し
WM_PAINT が送信されるというとんでもない自体が発生してしまいます・・・
(しかも、タイミングによっては起きたり起きなかったり)。

似た症例のアーティクルを検索してみたのですが、どれも決定的な解決法はないようで・・・

ttp://pullup.net/technical.html
ttp://www.adras.com/BUG-in-LockWindowUpdate-UnlockWindowUpdate.t288-27.html
ttp://groups-beta.google.com/group/borland.public.delphi.nativeapi/browse_frm/thread/4b212ed3eb974c59

もしも似たような経験がある方がいらっしゃいましたらご助言頂けませんでしょうか。
よろしくおねがいいたします。


25 名前:デフォルトの名無しさん :2005/10/11(火) 16:45:47
そこまでやるならリストビュー的なコントロールを1から自製したほうが早くね?

26 名前:24 :2005/10/11(火) 16:58:31
>>25 様、レスありがとうございます。
完全自前も少しは考えたのですが・・・
SYSLISTVIEW32 が実装している領域計算などの機能はかなり多く
(言い換えれば自作するにはかなりの機能をエミュレートする必要がある)、
さらにもともとコモンコントロールに対し実装していたコードからの
移植性も高いということで上記の方法を採用しました。


27 名前:デフォルトの名無しさん :2005/10/11(火) 17:08:50
若干すれ違いかもですが、教えてください。
regsvr32でcomの登録についてなんですが、

regsrv32 hoge.dll
自分のマシンでは、これで登録できるんですが、ほかのマシンにもっていくとエラーが発生し登録出来ません、
「hoge.dll」で使用してるコンポーネントやDLLが不足している為だと思うんですが、
具体的に、どのコンポーネント/DLLで失敗してるか見つける方法はありませんでしょうか?
よろしくお願いします。


28 名前:デフォルトの名無しさん :2005/10/11(火) 17:44:59
ビルドがXPでエラーの出たターゲット環境が2kとかで、
でもってビルドオプションにATL_MIN_CRTが定義されて無かったりとか。

エラーメッセージも環境も何も書いてないので、わかりまへん。
さらにスレ違いだとおもいます。


29 名前:24 :2005/10/11(火) 17:45:52
>>27 さん
もしも開発環境がインストールされていれば、
dumpbin または Dependency Walker で依存している DLL が確認することが
可能かと思われます。
参考になりますでしょうか。

30 名前:デフォルトの名無しさん :2005/10/11(火) 18:16:57
SetWindowText()を用いてエディットコントロール内の文字列を
変更しようとしているのですが、

[ ほげ ]
 ↓
SetWindowText(Edit , TEXT("はげ")) ;
 ↓
[ ほげはげ ]

のように、それまで入っていた文字に追加される形になってしまいます。
猫等のサイトで色々と調べてみると、
特にエディットコントロール内の文字列を
削除する手続き等は取っていないようにしか見えないのですが、
こういった文字列を削除する関数やメッセージはありますか?

ちなみにSETSEL→CLEARでも消えてくれません…

31 名前:デフォルトの名無しさん :2005/10/11(火) 18:27:13
追加じゃなくて上書きだから消す必要ない

32 名前:デフォルトの名無しさん :2005/10/11(火) 19:44:39
普通は追加の仕方がわからなくて悩むんだがな。

33 名前:デフォルトの名無しさん :2005/10/11(火) 21:20:56
HTREEITEM構造体を関数の引数にすると
構文エラーが出てしまいます。
どうしてなんでしょうか。

34 名前:デフォルトの名無しさん :2005/10/11(火) 21:27:29
たぶん構文エラーじゃないかな?

35 名前:デフォルトの名無しさん :2005/10/11(火) 21:39:15
>>33
構文が間違ってるから

36 名前:デフォルトの名無しさん :2005/10/11(火) 21:40:31
>>33
ちゃんとしたコンパイラを使ってるんなら構文エラーなんだろうなw
真剣に質問したいのならもう少し詳しく(関数名やエラー内容など)書いた方が‥‥釣りだと思われますよ?
とりあえず、その関数付近のソースを書いてみたら?

37 名前:デフォルトの名無しさん :2005/10/11(火) 21:47:13
>>36
釣りのつもりはないのですが...。

void name(HTREEITEM hTree);
といった関数を宣言してもエラーになります。
TC_ITEMとかでもなりました。


38 名前:デフォルトの名無しさん :2005/10/11(火) 22:01:20
エラー内容がわからんのでなんともいえんが‥‥
ツリービューもコモンコントロールだからcommctrl.hをインクルードしてcomctl32.libを
プロジェクトに加えないといけないよ?

39 名前:デフォルトの名無しさん :2005/10/11(火) 22:02:14
だから出たエラーをコピペくらいしろってんだ
俺らはエスパーじゃねぇんだよ

40 名前:デフォルトの名無しさん :2005/10/11(火) 22:15:35
じゃあ頑張ってエスパーになってください。

41 名前:デフォルトの名無しさん :2005/10/11(火) 22:27:24
>>40
人間に自分の考えを伝えられないのに、
機械に伝える事なんて出来ない。


42 名前:デフォルトの名無しさん :2005/10/11(火) 22:34:35
>>40
ヤダ

43 名前:33 :2005/10/11(火) 22:35:25
どうやらヘッダーの書き方がおかしかったみたいです。
>>38-39
すみませんでした。

44 名前:デフォルトの名無しさん :2005/10/11(火) 23:05:44
ある処理をwhileの無限ループで行っています。
この無限ループの処理自体はアプリ終了まで続けたいのですが、このまま終了してしまうとこの部分でメモリリークが起きてしまいます。

そこで、アプリ終了時にwhile文を抜ける方法(メッセージなど)があったら教えていただきたいです。

45 名前:デフォルトの名無しさん :2005/10/11(火) 23:10:48
>>44
マルチスレッド? シングルスレッド?
シングルスレッドだとwhileを抜けない限りは強制終了しかないわけなんだが…

46 名前:デフォルトの名無しさん :2005/10/11(火) 23:11:04
おーいエスパー。お呼びだぞ

47 名前:デフォルトの名無しさん :2005/10/11(火) 23:40:03
>>17
WM_NCPAINTのwParam

48 名前:デフォルトの名無しさん :2005/10/11(火) 23:44:08
>>44
終了すれば全部解放されるからループ内でメモリ使用量が
どんどん増えたりしてなければ気にすることはない

49 名前:デフォルトの名無しさん :2005/10/11(火) 23:44:11
エスパーなんて居ない!

50 名前:44 :2005/10/12(水) 00:04:03
>>48
どうもありがとうございます。

しかし、
while(1){
}
とやっただけでもデバッガがメモリリークを検出してしまいます。
これは問題ないのでしょうか?

51 名前:デフォルトの名無しさん :2005/10/12(水) 00:10:29
>>50=>>44
> デバッガがメモリリークを検出してしまいます

それ、何てデバッガ?

52 名前:デフォルトの名無しさん :2005/10/12(水) 00:13:07
デバッガについては明らかにスレ違い。

53 名前:44 :2005/10/12(水) 00:15:52
>>51
Visual Studio標準です。

54 名前:デフォルトの名無しさん :2005/10/12(水) 00:19:19
>>50
何を持ってメモリリークと言ってるんだ?
そもそも、メモリリークの意味判ってるのか?

55 名前:デフォルトの名無しさん :2005/10/12(水) 00:20:37
>>50
ttp://pc8.2ch.net/test/read.cgi/tech/1127737437/660

56 名前:デフォルトの名無しさん :2005/10/12(水) 00:23:52
>>55
>>41


57 名前:エスパー魔美 :2005/10/12(水) 05:41:34
呼んだ?

58 名前:デフォルトの名無しさん :2005/10/12(水) 06:23:50
呼んでないけど、とりあえず脱いでください。


59 名前:デフォルトの名無しさん :2005/10/12(水) 09:32:07
FindFirstChangeNotificationとGetFileTimeを使って指定したディレクトリ下の
ファイル(サブディレクトリの中のファイルも含む)の新規作成や上書き保存を
検出するソフトを作ろうとしているのですが, ファイル数やディレクトリの深さが
大きくなるほど時間がかかってしまいます.

見つけたディレクトリにかったぱしからFindFirstChangeNotificationを仕掛けるという方法も考えたのですが
ちょっとかっこよくない気がします

フィルタドライバ的なものでしかできないのでしょうか?(もちろんドライバを書く技量は持ってません...)
一発で更新されたファイル名のパスを教えてくれるAPIはありませんか?

60 名前:デフォルトの名無しさん :2005/10/12(水) 18:47:04
はい。
いいえ。

61 名前:デフォルトの名無しさん :2005/10/12(水) 18:59:55
ReadDirectoryChangesW

ディレクトリで発生した変更を記述した情報を返します

62 名前:デフォルトの名無しさん :2005/10/12(水) 19:20:17
>>44
メモリリークはおいといて・・・
アプリ終了時にループを打ち切るようにすればいいじゃないか。

その無限ループの中で、
アプリ終了したいよフラグを定期的にチェックして、
フラグが立っていたら、ループを抜けて、後片づけをして、
アプリ終了してもいいよフラグを立てる。

メインスレッドでは、
アプリ終了したいよフラグを立てて、
アプリ終了してもいいよフラグが立つのを待ってから終了する。


ただし、
アプリ終了してもいいよフラグについては、
単にvolatileなbool変数でやると、ダサすぎるので、
適切なロックオブジェクトを使ったほうがいいでしょう。

63 名前:デフォルトの名無しさん :2005/10/12(水) 20:27:33
>>50
>>45


64 名前:デフォルトの名無しさん :2005/10/12(水) 21:11:51
9x24だろと1を罵りたい

65 名前:デフォルトの名無しさん :2005/10/12(水) 21:32:02
9x?

66 名前:デフォルトの名無しさん :2005/10/12(水) 23:10:47
>>64
0x24の間違いなら>>2

67 名前:デフォルトの名無しさん :2005/10/12(水) 23:18:49
彼は九の段のことを言ってるんだよ

68 名前:デフォルトの名無しさん :2005/10/12(水) 23:45:50
VC6sp5/WindowxXPsp2環境で作成しています。
SwitchToThread()関数を使おうとしていますが使えません(外部参照が未解決になる)。
winbase.hはincludeしていますし、kernel32.libもリンクしました。
何がまずいのでしょうか。初歩的なことを見落としているように思うのですが・・・


69 名前:デフォルトの名無しさん :2005/10/12(水) 23:56:07
>>68
コンパイルオプションの問題、又はWINVERの定義の問題。
WINVERの他にも似たようなマクロが有ったような気がするけど思い出せない。

70 名前:デフォルトの名無しさん :2005/10/12(水) 23:59:16
>>68
MSDNにはこんなことが書いてある。
  Windows NT: バージョン 4.0 以降を使います。
  Windows: サポートされていません。
というわけでWindows.hのインクルードの前に#define _WIN32_WINNT 0x400とでも書く必要がある。
(Windows.hの中でWinbase.hはインクルードされるのでWinbase.hは自分でインクルードする必要はない)

もちろんこんなことをすると9xを捨てることになる。
捨てたくなければ今回はSleep(0);が代わりになる。

71 名前:68 :2005/10/13(木) 00:19:06
>>70さん
_WIN32_WINNTを定義してませんでした。
Windows.hじゃなくてWinbase.hをincludeしてました。
いま手元に環境がないので明日にでも試してみます。ありがとうございました。

72 名前:デフォルトの名無しさん :2005/10/13(木) 01:14:17
GetKeyState(), GetAsyncKeyState()が、なぜかPAUSEキーのときだけ妙な動作をします。

//検証用コード
for (;;)
{
if (GetAsyncKeyState(VK_PAUSE) & (1 << (sizeof(SHORT) * 8 -1)))
_putts(_T("PAUSE!")) ;
}

PAUSEキーをいくら押し下げようとも、連打しようとも、まったく反応がありません。
しかし、PAUSEキーを押した後に、何か別のキーを押すと、一回だけPAUSE!と表示されます。

キーボードが壊れているのかと思い、いくつかのキーボードで試しましたが、まったく同じ結果になります。
PAUSE以外のキーに変えると、押し下げた瞬間に大量にPAUSE!と表示されるんですが……。

WindowsはPAUSEキーだけ、なにか特別な処理でもしているのでしょうか?

73 名前:デフォルトの名無しさん :2005/10/13(木) 01:50:46
そもそもPauseキーが何なのかと。

74 名前:デフォルトの名無しさん :2005/10/13(木) 02:11:03
何て。
Pauseキーだろ?

75 名前:73 :2005/10/13(木) 03:54:01
Pauseキーを押したら、何か他のキーを押すまでPauseする
というのは機能であり仕様なんだってば。

76 名前:デフォルトの名無しさん :2005/10/13(木) 06:33:39
デスクトップにあるショートカットのリンク先の所に
オプション /A と /B で hoge.exe を起動する為に
c:\hoge.exe /A /B
としてあるのですが、
エクスプローラーからファイルをこのショートカットに
ドラッグ&ドロップした時に、
c:\hoge.exe /A /B FileName
の様に hoge を起動したいのですが、
c:\hoge.exe FileName
としかならなくて困ってます。
どうにかなりませんか?

77 名前:デフォルトの名無しさん :2005/10/13(木) 06:38:10
>>76
特に何もしなくてもオプションは無視されないんだが
環境は?

78 名前:76 :2005/10/13(木) 06:51:20
>>77
Win95です。

79 名前:デフォルトの名無しさん :2005/10/13(木) 07:37:29
>>72
無限ループにfor(;;)なんてキモ過ぎ

80 名前:デフォルトの名無しさん :2005/10/13(木) 08:24:22
>>78
スレ違いじゃないのか……。

強引にAPIに持って行くと、

話を聞くとそれはおそらく、Win95の場合、そうなるようなので、
解決策としては専用のランチャーを作るべきだ。
それをするには、具体的にはたとえばCreateProcess()を云々……

81 名前:デフォルトの名無しさん :2005/10/13(木) 09:46:05
質問です。

とあるアプリケーションが
system();
などで別のアプリケーションを呼び出すということは多々あるかと思います。
この呼び出しをフックして、どういう呼び出しをしているのか知りたいのですがキーフックのようにAPIは用意されていますでしょうか?

具体的に申し上げますと、
携帯アプリ開発エミュレータで「プロジェクト管理アプリ」が「実行アプリ」を呼んでいます。
ですがこの「プロジェクト管理アプリ」が遅いのなんの…。
実行アプリだけ呼び出してやりたいのですが、一体どんな引数などを渡しているのか分からないのです。




82 名前:デフォルトの名無しさん :2005/10/13(木) 09:50:38
APIフックは可能だけど、その程度ならOllydbgあたりでプロジェクト管理アプリを開いて
CreateProcessなりsystemなりのAPIにブレークポイントを仕掛け、引数を見た方が早いと思う。

83 名前:デフォルトの名無しさん :2005/10/13(木) 10:08:06
>>82
なるほど。確かにその通りですね。
試してみます。
ありがとうございました。

84 名前:デフォルトの名無しさん :2005/10/13(木) 11:01:04
もっさりしてるのはJavaだからしょうがないよ
あきらめるしかない

85 名前:デフォルトの名無しさん :2005/10/13(木) 11:03:02
ゴバクか?

86 名前:デフォルトの名無しさん :2005/10/13(木) 15:00:41
>>82
プロジェクト管理アプリをOllydbgでトレースしようとしたら固まってしまいました。
javaアプリなので、javaにいわゆるトレース対策がされていたのだと思います。

結局APIフックを作ってしまいました(;´Д`)


87 名前:sage :2005/10/13(木) 17:06:25
http://home.hiroshima-u.ac.jp/c-program/

88 名前:デフォルトの名無しさん :2005/10/13(木) 21:29:10
お、初心者の俺には役に立ちそうなサンプル集だ。
おぶりが〜ど!

89 名前:デフォルトの名無しさん :2005/10/14(金) 04:41:48
WSHのPopupメソッドみたいに、指定した秒数で
自動的に閉じるメッセージボックスを表示するAPIって無いですか?

90 名前:デフォルトの名無しさん :2005/10/14(金) 06:19:14
API一発ではできませんので自分でタイマー回してEndDialogで閉じる

91 名前:76 :2005/10/14(金) 06:48:12
>>80
プログラムでなんとか出来ないかと思ってここで質問しました。
パラメータがファイル名のみの時は別処理にします。
ありがとうございました。

92 名前:デフォルトの名無しさん :2005/10/14(金) 10:28:24
WindowFromPointで取ってきたHWNDから
GetWindowTextしてWindowの文字を取ってくる。

後(再起動)ほど
FindWindowで先ほどのWindow文字を入れたら
返りが0になるのですが、FindWindowでHWNDを取得するためにはどの文字を取ればよいのでしょうか?


93 名前:デフォルトの名無しさん :2005/10/14(金) 11:08:11
それはウィンドウがないか文字列が変わっただけじゃまいか?

94 名前:93 :2005/10/14(金) 11:15:40
追記:
それかボタンコントロールとかのキャプションを取得してるとかだな
親ウィンドウたどってGetWindowTextするといい

95 名前:デフォルトの名無しさん :2005/10/14(金) 11:16:43
>>92
WindowFromPointで取得したウィンドウが子ウィンドウとか?

96 名前:デフォルトの名無しさん :2005/10/14(金) 11:27:41
>>92 です。すいません。
FindWindowにtextを入れる場所をまちがっていました。
FindWindow(a, NULL);×


97 名前:デフォルトの名無しさん :2005/10/14(金) 11:29:52
>>92
再起動前の取得文字列をどう保存して、再起動後にどう復元してる?
保存・復元の方法がおかしくて、Findしてる文字列が間違ってる可能性も考えられるぞ。

98 名前:デフォルトの名無しさん :2005/10/14(金) 11:30:50
>>96
なに、そのオチ・・・

99 名前:デフォルトの名無しさん :2005/10/14(金) 11:33:16
>>98
本気でスマソ

100 名前:デフォルトの名無しさん :2005/10/14(金) 11:41:07
そのオチを見抜けなかった俺らはマダマダだなw

101 名前:デフォルトの名無しさん :2005/10/14(金) 13:18:09
http://pc8.2ch.net/test/read.cgi/tech/1128872687/から誘導されてきました。

猫や
ttp://www.kab-studio.biz/Programing/Codian/index.html
ttp://www.doumo.jp/aon-java/jsp/postgretips/tips.jsp?tips=79
などを見てもいまいち理解できなかったのですが、

SendMessageでマウス制御する方法(別途用意するものなど)を教えてもらえないでしょうか、
それと、Hookの中身は、SendMessage等と同じDll内に記述しても問題ないのでしょうか、

VC++を使っています。

102 名前:デフォルトの名無しさん :2005/10/14(金) 13:26:02
誘導元のスレ見るのめんどいから、
何がしたいのかはっきり書いてくれんかね。
何がしたいのか、それじゃよくわからんが。

システム全体のマウスメッセージをフックしたいだけ?
それならフックDLL作って、
DLLからフックしたメッセージを利用するアプリケーションに
何らかの方法で通知すればいいとおもうけど。

あと、マウスメッセージなんかはかなりの頻度で飛んでくるはずだから、
DLL内でフックしたメッセージを利用する処理をダラダラ書くと、
良いこと無いと思うけど。


103 名前:デフォルトの名無しさん :2005/10/14(金) 14:31:16
説明不足ですみません。

マウスの動きをマクロ化したいのですが、
できれば、指定したアプリケーションにマウスの動きを通知するだけで、
実際のマウスカーソルとは独立させて動かすことはできるのでしょうか、

寝マクロ君やUWSC的な動きをさせたいと思っています。

 その上で、マウスカーソルとは切り離した動きができないかと思っています。

104 名前:デフォルトの名無しさん :2005/10/14(金) 15:05:08
Win32APIって、円とか曲線て引けましたっけ?

105 名前:デフォルトの名無しさん :2005/10/14(金) 15:08:25
質問する前に調べろ

106 名前:デフォルトの名無しさん :2005/10/14(金) 15:15:45
>>104
たぶん。

107 名前:デフォルトの名無しさん :2005/10/14(金) 15:31:29
>>104
ArcとかPolyBezierとか

108 名前:デフォルトの名無しさん :2005/10/14(金) 15:43:41
円つーか楕円はEllipseだな。

109 名前:デフォルトの名無しさん :2005/10/14(金) 15:44:49
>>103
マウスメッセージはキャプチャして置いてマクロ化して保存。

マクロ実行で、ターゲットアプリケーションにのみ保存したマウスメッセージを投げる。

キャプチャ時と実行時でのマウス座標をどうするかとか、
考慮しなきゃいけない部分がありそうだけど、
上記のまま十分実装出来そうな気はするけど。

110 名前:デフォルトの名無しさん :2005/10/14(金) 15:52:50
PostThreadMessage()でスレッドにメッセージを送りたいのですが、エラーとなってしまいます。
GetLastError()で調べるとコード1564「メッセージは同期した操作とのみ使用できます」のエラーのようです。
下記URLの通り予めメッセージキューは作成してあります。
メッセージを受け取るスレッドにてPeekMessage()は正常終了しています。
スレッドですからタイミングの問題とかあるんでしょうか。
いろいろ試してみましたがよく分からずお手上げ状態です。
誰か詳しい方いましたらご教示願います。

   ↓
http://www5a.biglobe.ne.jp/~crab/winsdk/PostThreadMessage.html



111 名前:デフォルトの名無しさん :2005/10/14(金) 16:06:40
> 110
忘れてましたが、環境はWin2000(SP4) + Visual Studio 6.0(SP6)です。


112 名前:デフォルトの名無しさん :2005/10/14(金) 16:07:59
>>110
1564なんてエラーコードあったっけな・・・?

手元の環境では、FormatMessageしてもエラーになるんだが

113 名前:デフォルトの名無しさん :2005/10/14(金) 16:09:04
MESSAGE_SYNC_ONLYは1159だね

114 名前:デフォルトの名無しさん :2005/10/14(金) 16:21:58
> 112
> 113
失礼しました。1159です。


115 名前:デフォルトの名無しさん :2005/10/14(金) 16:29:09
>>110
>MSDN日本語版では、PostThreadMessage()の使用上の注意として「ポストされるスレッドでメッセージキューが作成されている必要がある」と記載されていますが、
>具体的な作成方法までは記載されいません。
↑この件だけど、AttachThreadInput 側に書いてある… で、

 スレッドのメッセージキューは、スレッドが Win32 USER 関数または Win32 GDI 関数の 1 つを初めて呼び出したときにシステムによって作成されます。

なので、PostThreadMessage される側のスレッドエントリの先頭で(PeekMessage のループの前に) 適当なAPI呼べばどうだろう?

116 名前:デフォルトの名無しさん :2005/10/14(金) 16:51:38
>>110,>>112
WM_USERより低いシステムメッセージ投げてない?

WM_CREATEとか投げると、そのエラー出るよ

117 名前:116 :2005/10/14(金) 16:52:52
ぐを、アンカーミス

>>112スマソ

118 名前:デフォルトの名無しさん :2005/10/14(金) 17:01:43
PeekMessage()はWIN32 USER関数に含まれないのか?
というかPeekMessageで読み出せるのに、メッセージキューが作られていないってどういう状況だ?

119 名前:デフォルトの名無しさん :2005/10/14(金) 17:04:35
そもそも、何をもってPeekMessageは正常終了と思ってるのかが知りたい
まさかPeekMessageの戻り値じゃねぇよな

120 名前:デフォルトの名無しさん :2005/10/14(金) 17:05:18
ぐわ てきとー書いた。スマン。
いくらなんでも PeekMessage() 1発呼んで終わりなスレッド ってことないもんな。

121 名前:デフォルトの名無しさん :2005/10/14(金) 18:14:46
> 116
これでいいのでしょうか?
ret = PostThreadMessage(threadId[no], WM_USER + no, 0, 0);

> 120
スレッドの先頭でPeekMessage()をループさせるようにしました。
116,120のようにしたら、何とかうまく行ったみたいです。
ただ、この様に修正しなくとも時々うまく行く場合もありました。
よく分かりませんが、取り合えずこれで様子を見てみます。
ありがとうございました。


122 名前:デフォルトの名無しさん :2005/10/14(金) 21:50:13
>>5
>Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/
死んでるから次スレでは外した方がいい。
流れぶった切ってゴメソ

123 名前:デフォルトの名無しさん :2005/10/15(土) 08:15:18
Windows SDKについて質問です。

既存のシリアル通信プログラムがあります。
その通信プログラムを変更せずに、
外部から通信をフックしてモニタリングする方法(関数)なんてあるんでしょうか?

やっぱり、モニタ機を通信ケーブル間に入れるのが一般ですかね?

124 名前:デフォルトの名無しさん :2005/10/15(土) 08:19:44
>>123
モニタリング機能載せた仮想シリアルポートのドライバ作って通信プログラムを仮想ポートに接続させとくとか

125 名前:デフォルトの名無しさん :2005/10/15(土) 08:23:53
COMポートのフィルタドライバを開発する
(ベクターとかにシェアウェアでいくつかあった希ガス)

APIレベルで解決するなら、
COMポートの通信に使用しているAPIをフックすれば
モニタできる・・・んだろうか?

126 名前:デフォルトの名無しさん :2005/10/15(土) 12:15:24
>>124 & >>125
ををを!
例えばドライバを作るとして・・・・・
・・・・・何のSDKを調べりゃいいんですかね?
やっぱDDK辺りを?

127 名前:デフォルトの名無しさん :2005/10/15(土) 12:43:34
>>126
DDKだろね

ttp://www.sysinternals.com/utilities/portmon.html
↑にヒントぽいのがあるぞ
まぁ、モニタそのものもあるんだが…w

128 名前:デフォルトの名無しさん :2005/10/15(土) 15:41:01
WindowFromPoint()で取ってきたHWNDがWindowなのか他のものなのかを
判断する方法ってありますでしょうか?

WindowFromPoint()する場合そこがタイトルバーかどうかの
判断方法はどのようにしておこなえばよいのでしょうか?
教えてエロ人!


129 名前:デフォルトの名無しさん :2005/10/15(土) 15:46:59
前半意味が分からん(HWNDがウィンドウじゃなきゃ何なんだ?)
後半WM_NCHITTESTを送信する

130 名前:デフォルトの名無しさん :2005/10/15(土) 15:47:34
RealGetWindowClass

131 名前:デフォルトの名無しさん :2005/10/15(土) 15:48:39
>>128
閉じるメッセージを送って閉じなければタイトルバー
閉じればウィンドウ

132 名前:デフォルトの名無しさん :2005/10/15(土) 16:39:37
>>131
バカだこいつ・・・

133 名前:デフォルトの名無しさん :2005/10/15(土) 17:14:51
質問の雰囲気的にはGetWindowLongPtr()でウィンドウスタイルを取得して調べた方がいいのでは。

134 名前:デフォルトの名無しさん :2005/10/15(土) 17:49:39
>>127
ありがとうございます。
調べてみます!

135 名前:デフォルトの名無しさん :2005/10/15(土) 19:03:31
>>123
それでもやはり、回線モニタは用意した方がいいぞ。
#仕事なら言うまでもないことだが。

136 名前:デフォルトの名無しさん :2005/10/15(土) 20:19:45
>>135
バカだこいつ・・・

137 名前:デフォルトの名無しさん :2005/10/15(土) 20:24:46
C/C++室から誘導されてやってきました。

デスクトップ上のアクティブウインドウに別のプログラムから
キー入力を行うにはどうすればよいのでしょうか。
WIN APIとMFCをごっちゃで使っています。

HWND wh = ::GetForegroundWindow();
::SendMessage(wh, WM_CHAR, 'a', 0);

として、メモ帳をアクティブにしても何も表示されません。

138 名前:デフォルトの名無しさん :2005/10/15(土) 20:25:17
SendInput

139 名前:デフォルトの名無しさん :2005/10/15(土) 20:30:29
まずは、WM_KEYDOWNじゃないか?
それ以前に、指定したウィンドウが子ウィンドウにメッセージを転送してくれるとは限らないし、
SendMessage()系統のAPIでメッセージをトップウィンドウに送信しても無駄だと思う。

140 名前:デフォルトの名無しさん :2005/10/15(土) 20:46:38
>>136
なんで?

141 名前:デフォルトの名無しさん :2005/10/15(土) 20:53:26
>>140
ヒント:メール欄

142 名前:デフォルトの名無しさん :2005/10/15(土) 21:23:16
>>141
sageがヒント?
あなたキティ?


143 名前:デフォルトの名無しさん :2005/10/15(土) 21:26:18
おまえがな

144 名前:デフォルトの名無しさん :2005/10/15(土) 21:29:19
仮想シリアルポートのドライバの件、同じような事を考えてたけど

kernel32.dll を全部スルーするスケルトンどっかにないかな
そしたら、必要な所だけにコード書いて、そいつを実行ファイルと同じフォルダに入れるだけで
アレやコレや出来るのにって事。

いや、簡単なのは判ってるけど、ただ面倒なんだよね

145 名前:デフォルトの名無しさん :2005/10/15(土) 21:45:06
>>142
お前の人生っていつもそんな感じだよな

146 名前:デフォルトの名無しさん :2005/10/15(土) 21:48:23
>>137
メモ帳の場合は、メモ帳のウィンドウにあるEDITにキーイベントを送らないといけません。
アプリケーションごとにフォーカスがどの子ウィンドウににあるか意識したくないのであれば
keybd_event()使った方がよいでしょう。

> HWND wh = ::GetForegroundWindow();
ここで正しくメモ帳のウィンドウハンドルが取れているかどうかも確認した方が。


147 名前:137 :2005/10/15(土) 22:35:44
::keybd_event('A', 0, 0, 0);
::keybd_event('A', 0, KEYEVENTF_KEYUP, 0);

で入力できました。答えてくれた方々ありがとうございます。

148 名前:デフォルトの名無しさん :2005/10/15(土) 22:39:38
'A'
これ似てるなw

149 名前:デフォルトの名無しさん :2005/10/15(土) 22:47:19
('A')<僕の顔をお食べよ

150 名前:デフォルトの名無しさん :2005/10/15(土) 23:24:19
>>144
探せばいくつも出てくると思うよ。
俺は任意のDLLを媒介するDLLのソースを自動生成するツールを、どっかで見たよ。

151 名前:デフォルトの名無しさん :2005/10/15(土) 23:27:08
エディットウィンドウEWを作成しています。
EWのデフォルトの文字の大きさ、フォントが好きではないので自分で
設定したいと思ったのですが、変更する方法を教えていただけませんか?

152 名前:デフォルトの名無しさん :2005/10/15(土) 23:29:31
それくらいMSDNで探せ

153 名前:デフォルトの名無しさん :2005/10/15(土) 23:30:46
>>150
>任意のDLLを媒介するDLL
そうか アセンブラで書いて、必要な関数以外、 中身は JMP 命令 にすればいいんだ!


154 名前:デフォルトの名無しさん :2005/10/15(土) 23:36:02
>>153
DLLフックしちゃダメなの?

155 名前:デフォルトの名無しさん :2005/10/15(土) 23:48:32
>>154
ファックしたらつかまるぞ

156 名前:デフォルトの名無しさん :2005/10/16(日) 00:10:07
正直むかついた。

157 名前:デフォルトの名無しさん :2005/10/16(日) 00:54:08
WSAWaitForMultipleEvents()でPostThreadMessage()の
メッセージのイベントって拾えるのでしょうか。

要はソケットとメッセージのイベント両方を待ち受けしたいのですが
他にいい方法があれば誰か詳しい方ご教示願います。

他にWaitForMultipleObjects()などもありますが今ひとつ使い方が
よく分かりません。よろしくお願いします。


158 名前:デフォルトの名無しさん :2005/10/16(日) 00:57:58
マルチするくらいなんだから、
お前さんもWaitForMultipleObjectsしていなさいな。


159 名前:デフォルトの名無しさん :2005/10/16(日) 00:59:20
>>157
MsgWaitForMultipleObjects()
とかじゃなくてか?

160 名前:デフォルトの名無しさん :2005/10/16(日) 02:31:41
>>150
listexpだな

161 名前:デフォルトの名無しさん :2005/10/16(日) 05:00:40
>>144
そんな面倒なことしなくても、DLLがエクスポートしている関数に
フックを仕掛けることができる。
これなら書かなければいけないコードは、フックする関数の分だけでいい。

>>153
そんなアナタにはnaked関数がおすすめ。

162 名前:デフォルトの名無しさん :2005/10/16(日) 09:00:49
質問です。
クラスに WC_TABCONTROL を指定してタブコントロールを作ったんですが、
タブ上で右クリックされたことを検出するにはどうしたらよいでしょうか?


163 名前:デフォルトの名無しさん :2005/10/16(日) 15:51:08
質問です。
ルートのウィンドウにCreateWindwoで貼り付けた"BUTTON"コントロールの、
文字色を設定したい場合はOwnerDrawというやつしか手段はないもんでしょうか?

フォントはWM_SETFONTで変わるけど色が…。
そもそもSetWindowTextで文字を出力するのが間違い?
でもHDC取得してTextOutじゃ何も表示されないし。

識者の方々、御指南求みます。


164 名前:163 :2005/10/16(日) 15:55:41
…訂正。

×Windwo
○Window

うぃんどぅお。_| ̄|○ il||li


165 名前:デフォルトの名無しさん :2005/10/16(日) 15:58:26
>>163
他にも方法はあるが、OwnerDrawでやるのが無難。

166 名前:163 :2005/10/16(日) 16:02:25
>>165
識者殿、サンクス。
猫WinとAPIリファレンスで修行中です。

これからOwnerDrawってやつの使い方を探す旅にいってきま。
目指せWinXPの電卓みたいなボタン。


167 名前:デフォルトの名無しさん :2005/10/16(日) 18:15:17
>>166
XPの電卓みたいなボタンでいいならマニフェストを書くだけだぞ。
XP以外のOSでもああいうボタンにしたいならけっこう手間だけど

168 名前:デフォルトの名無しさん :2005/10/16(日) 18:20:07
質問があります。

5ボタンマウスの戻ると進むボタンに対して、アクセラレータキーを割り当てたいのですが、
どのようにすれば割り当てられますか?

環境は、VC.net 2003です。

169 名前:163, 166 :2005/10/16(日) 18:25:46
>>167
XP限定なら、マニフェストでもできるですか。
OwnerDrawを使うと、98だら2000だらでも文字色が変えられるってことですな。

ん〜OwnerDrawは、この先どのみち避けて通れない道っぽいので、
今回は習作だし、"けっこうな手間"をかけてみることにしまつ。

Manifestも手段の一つとして覚えておきま。サンクス。


170 名前:デフォルトの名無しさん :2005/10/16(日) 18:29:10
>>163
VC6のMSDN読むとWM_CTLCOLORBTNでできそうに見えるんだけど、
実際はできないんだよなあ。後の版でこっそり訂正入れてやがるの。

171 名前:163 :2005/10/16(日) 19:13:17
>>170
できそうに見えたので、散々やってみましたが、
できなかったので聞いてみた次第です。(w
BM_SETTEXTCOLOR とか、あってもよさそなもんですが…。


172 名前:デフォルトの名無しさん :2005/10/16(日) 22:03:29
あ、あのね、あのね、聞きたいことがあるんだけど答えてくれるかなぁ

173 名前:デフォルトの名無しさん :2005/10/16(日) 22:15:17
ダメ絶対

174 名前:デフォルトの名無しさん :2005/10/16(日) 22:15:32
いいえ

175 名前:デフォルトの名無しさん :2005/10/16(日) 22:32:28
うむ

176 名前:172 :2005/10/16(日) 23:18:04
げ、現役女子大生なんですけど質問しちゃだめなんでしょうか?
若さが足りません?

177 名前:デフォルトの名無しさん :2005/10/16(日) 23:19:39
>>176
足りない足りない。
もー全然足りないね。
どのくらい足りないかというと15年くらい。
とっくに腐ってるよ。

178 名前:現役女子高校生 :2005/10/16(日) 23:22:55
>>176
オバさんはお帰り下さい

179 名前:デフォルトの名無しさん :2005/10/16(日) 23:23:16
>>176
俺が在籍してた大学には白髪のおじいさんもいたよ。現役大学生で。
ある意味若いがw

180 名前:172 :2005/10/16(日) 23:29:26
>177さん15年ってあなた・・・
私、今年還暦を迎えたのですがあなたの好みは45〜ですか?
それなら従姉妹のいいのがいるので紹介しますから
質問に答えてもらえません?
大丈夫です、貞操は守っているそうですから。

181 名前:現役女子中学生 :2005/10/17(月) 00:08:44
>>180
おばあさんはお帰り下さい

182 名前:デフォルトの名無しさん :2005/10/17(月) 00:14:52
質問スレなんだから質問して良いですかなんてくだらない質問しないで即質問していれば良かったのに質問

183 名前:デフォルトの名無しさん :2005/10/17(月) 02:48:55
CreateFileなどで得たHANDLEからファイル名を取得できるAPIはありますか?

184 名前:デフォルトの名無しさん :2005/10/17(月) 08:30:31
いやおまえ、CreateFileしてる時点でファイル名わかってるだろ・・・
まさか別のプログラムにハンドル渡すとかバカなこと考えてるんじゃねぇだろうな・・・

185 名前:デフォルトの名無しさん :2005/10/17(月) 08:33:01
そんなAPIは無いな

186 名前:デフォルトの名無しさん :2005/10/17(月) 09:07:54
DirectInputを使ったアプリケーションに対してマウスイベントを送る方法はないでしょうか?
キーボードイベントはスキャンコードを使用して実現できたのですが・・・・

187 名前:デフォルトの名無しさん :2005/10/17(月) 16:47:05
ファイルの先頭にファイル名でも書いとけ

188 名前:デフォルトの名無しさん :2005/10/17(月) 19:43:18
>>184
> 別のプログラムにハンドル渡すとかバカなこと

いちおうWindowsでは可能だし、そのための仕掛けもある。

でも普通はやらない。

189 名前:デフォルトの名無しさん :2005/10/17(月) 20:20:21
stdin/stdoutのリダイレクト元を調べたいとか?

190 名前:デフォルトの名無しさん :2005/10/17(月) 20:48:20
>>183
NtQueryObject

191 名前:デフォルトの名無しさん :2005/10/17(月) 20:50:16
sage 忘れた・・

>>183
この辺参考に。
http://www.codeproject.com/debug/cdbntsd5.asp

192 名前:183 :2005/10/17(月) 21:22:48
たんに、OS側でもってると思われるHANDLE->ファイル名の表を
アプリ側がもつのが嫌なだけです.

NtQueryObjectはドキュメント化されてないAPIのようで
ちょっと調べてみます. ありがとうございました

193 名前:デフォルトの名無しさん :2005/10/17(月) 21:25:13
Windowに対してマウスの挙動で、ロールオーバー、ロールアウトみたいなイベントを作り出したいんですが、
どこかにサンプルコードとか公開されてませんでしょうか?、情報ありましたらよろしくお願いします。


194 名前:デフォルトの名無しさん :2005/10/17(月) 21:31:38
>>193
これじゃダメなの?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/mouseinput/mouseinputreference/mouseinputfunctions/trackmouseevent.asp

195 名前:デフォルトの名無しさん :2005/10/17(月) 21:33:49
>>192
(゚д゚;)・・・・

196 名前:デフォルトの名無しさん :2005/10/17(月) 22:11:45
国が持ってる個人情報を自分で持つのは嫌です…?

197 名前:デフォルトの名無しさん :2005/10/17(月) 22:17:00
データベースの正規化の思想に近いモンなんじゃねえのか?

198 名前:デフォルトの名無しさん :2005/10/17(月) 22:21:23
DuplicateHandleは、どういう用途に使うものなのですか?

199 名前:デフォルトの名無しさん :2005/10/17(月) 22:28:50
管理したくないならファイルハンドルの方を閉じて開きなおせばいいだけ

200 名前:デフォルトの名無しさん :2005/10/17(月) 22:43:52
>>198
ハンドルを他プロセスに渡したいときとか

201 名前:198 :2005/10/17(月) 22:46:32
>>200
ありがとう。

202 名前:デフォルトの名無しさん :2005/10/17(月) 22:48:41
>>197
まったく無関係

203 名前:デフォルトの名無しさん :2005/10/17(月) 22:49:02
>>192
GetFileInformationByHandleなんかからも想像できると思うが、
HANDLE->ファイル名をOSが持っているとは限らん。


204 名前:デフォルトの名無しさん :2005/10/17(月) 22:50:54
グローバル変数hInstanceじゃなくGetModuleHandle(NULL)の思想に近いモンなんじゃねえのか?

205 名前:デフォルトの名無しさん :2005/10/17(月) 23:37:50
>>202
そーか?
データを二重持ちしないのは正規化の基本だべ

206 名前:デフォルトの名無しさん :2005/10/18(火) 00:16:42
>>205
そもそも、元々存在ものを正規化するとは、どういう了見よ?
と言う話だろ?

207 名前:206 :2005/10/18(火) 00:17:58
×存在ものを
〇存在しないものを

ヌケタ…orz

208 名前:デフォルトの名無しさん :2005/10/18(火) 00:34:04
>>206
ファイル名、というモノは存在するだろ。

209 名前:デフォルトの名無しさん :2005/10/18(火) 02:48:48
NTFSだと、ファイルハンドル開いてる最中に、削除なり、リネームなりできるので、
そういった場合のHANDLEとファイル名の対応ってのは曖昧になる。
たぶん、OS内ではファイルシステム上での識別子(UNIXでいうi-node番号)と、
HANDLEの対応表はもってるけど、それが、何というファイル名で参照されたのかは、
管理してないんじゃないかと思う。

210 名前:デフォルトの名無しさん :2005/10/18(火) 03:05:45
その考えで行くと、
「それ」がいま、なんと言うファイル名なのか、はわかりそうなものだけど。

そういえば、sysinternalsのProcess Explorerは、
プロセスが開いているファイルハンドルと、ファイルパスを見ることができるけど、
あれはどうやっているんだろう。

211 名前:デフォルトの名無しさん :2005/10/18(火) 03:14:10
>>198
ハンドルには、全てのプロセスで共通に使えるものと
自分のプロセスでしか使えないもの(擬似ハンドル)があるのよ。

擬似ハンドルは実は定数で、どのプロセスで取得しても同じ値が返ってくる。
DuplicateHandleを使うと、擬似ハンドルを本物のハンドルに変換できる。

212 名前:デフォルトの名無しさん :2005/10/18(火) 03:50:35
>>210
「ちょっと前」はわかっても、「いま」は、わからない。
ファイル名の変更をロックでもしない限り、取得した後も変っていないことは誰も保証できない。


213 名前:デフォルトの名無しさん :2005/10/18(火) 07:27:34
そんなこと言い出したらGetModuleFileNameすら信用できないわけだが。
ファイルコピーするときはコピー元とコピー先を完璧にロックしてから
始めなきゃ信頼できないわけだがWindows Server 2003以外には
そもそもそのための機構(ボリュームのシャドウコピーとか)すらないし
ファイルの保存ダイアログの上書き確認とか、答えてる間に状態が
変わってるとか超ありそうなもんだが誰も気にしてないし。
近似で十分なことなんていくらでもあるもんだよ。
ちなみにProcess Explorerとかで取れるのは「開いたときになんという
パスを使ったか」だと思われ(そうじゃないとハードリンクを持ってるファイルとか
決定のしようがないし)

214 名前:デフォルトの名無しさん :2005/10/18(火) 07:30:18
つーかハンドルはあるんだからロックが必要ならロックすれば言いだけの話だし

215 名前:デフォルトの名無しさん :2005/10/18(火) 08:10:10
>>213
GetModuleFileNameはファイル名を求めるためより、
実行ファイルの有るディレクトリのフルパスを求めるのに使われる方が多いからな
EXE実行中のディレクトリは名前変更不可だ

216 名前:193 :2005/10/18(火) 10:46:37
>>194
イイ!
多謝多謝!
助かりました。


217 名前:デフォルトの名無しさん :2005/10/18(火) 10:49:05
FindWindowでウィンドウ名だけ指定したとき、同じウィンドウ名がいくつかあった場合の優先順位ってありますか?

218 名前:デフォルトの名無しさん :2005/10/18(火) 11:38:14
>>217
不定と考えてプログラムを組むべき

219 名前:デフォルトの名無しさん :2005/10/18(火) 11:46:13
不定じゃない
Cのライブラリみたいにベンダー毎に実装の仕方を任せてるものでも無いのに不定でたまるか

>>217
全ての同じ名前のウィンドウの中で、最も前面にあるウィンドウのハンドルが返る
あと、同じ名前のウィンドウでも、それが子ウィンドウの場合は検索対象にならないのは知ってるよな?

220 名前:217 :2005/10/18(火) 11:48:13
>>219
thx

221 名前:デフォルトの名無しさん :2005/10/18(火) 11:49:20
全OSでそう動けばいいけど…。

222 名前:デフォルトの名無しさん :2005/10/18(火) 11:55:29
>>219
>>218は、
ドキュメントに書いてない挙動を前提として
プログラムを書くのは良くないってことかと

実際に、ドキュメントに書いてあるかどうかは知らんけど

223 名前:デフォルトの名無しさん :2005/10/18(火) 12:29:56
MSDN斜め読みしたが、書いてないっぽいから不定として扱うべきだな。

224 名前:デフォルトの名無しさん :2005/10/18(火) 12:36:51
不定行為

225 名前:デフォルトの名無しさん :2005/10/18(火) 13:03:24
イヤン

226 名前:デフォルトの名無しさん :2005/10/18(火) 13:46:11
>>224
ナニイッテルンデスカ

227 名前:デフォルトの名無しさん :2005/10/18(火) 14:45:59
たまにいるんだよなー

仕様に書いてないから、わからない。

という言うと、

実際に試してみろよ、何でも人に教わろうとするなよ

とかいって怒りだす人が。

そんなこと言ってるんじゃないのよー。

228 名前:デフォルトの名無しさん :2005/10/18(火) 14:51:23
何の話だ・・・

229 名前:デフォルトの名無しさん :2005/10/18(火) 14:53:04
スレの質が低下してまいりました。

230 名前:デフォルトの名無しさん :2005/10/18(火) 14:55:18
ごめん、それはたぶん俺のせいだ

231 名前:デフォルトの名無しさん :2005/10/18(火) 15:43:15
つまり未定義命令を使うとHD64180で動かないという話だろ

232 名前:デフォルトの名無しさん :2005/10/18(火) 16:13:13
>>227
DirectXでまでそんなこと言うような奴は、狂ってるんだろうなw

233 名前:デフォルトの名無しさん :2005/10/18(火) 22:17:26
>>215
FATだと(Win9xだと?)変更できるな
WINDOWSディレクトリのリネームすらできるという豪快さ
(もちろんリネームした後はまともに動かなくなるが)

234 名前:デフォルトの名無しさん :2005/10/18(火) 22:20:00
まぁ、今ほとんどNTFSだからな

235 名前:215 :2005/10/18(火) 22:21:01
でもな、不思議なことに、実行中のEXE自身は名前変更できるんだよな・・・
MSめ、中途半端なことしやがって・・・

236 名前:デフォルトの名無しさん :2005/10/18(火) 22:29:39
NT4あたりだと確か削除すらできたぞ
もちろん終了するまでクラスタは解放されないけど

237 名前:デフォルトの名無しさん :2005/10/18(火) 22:34:54
さらにカレントディレクトリをexeのあるディレクトリ以外にして起動するとリネームできる。
つまりリネームできなくなる原因は「exeがそこで実行されているから」ではなくて
「そこがカレントディレクトリになっているから」(内部的にプロセスはカレントディレクトリ
のハンドルを保持している)

238 名前:デフォルトの名無しさん :2005/10/18(火) 22:40:35
つーわけでGetModuleFileNameの結果を当てにしすぎると不幸になるかもしれない

239 名前:デフォルトの名無しさん :2005/10/18(火) 22:58:21
>235
へー。メモリマップドファイルとしてオープンされてるのかと思ってたよ。

240 名前:デフォルトの名無しさん :2005/10/18(火) 23:13:02
>>239
されてるよ。されてるにもかかわらずリネームできるの。
UNIXじゃ常識だけどWindowsの常識ではびっくりだわな。

241 名前:デフォルトの名無しさん :2005/10/19(水) 03:53:02
>>227
OSのバージョンが上がったり、サービスパックや修正パッチがあたると、
途端に動作が破綻する糞コードを書く人がいるよねー。

242 名前:デフォルトの名無しさん :2005/10/19(水) 11:58:16
メッセージの管轄はここじゃないよね?

243 名前:デフォルトの名無しさん :2005/10/19(水) 13:32:23
とりあえず申してみい

244 名前:デフォルトの名無しさん :2005/10/19(水) 13:48:05
ゴメ、やっぱやめておく。

245 名前:デフォルトの名無しさん :2005/10/20(木) 01:16:58
>>235
「フッ、つまらん釣りだな」と思いつつ、試してみた。
XPHomeSP2でも実行中のEXEをリネーム・移動ができた。
・・・正直驚いた。

246 名前:デフォルトの名無しさん :2005/10/20(木) 07:02:53
それなら設定をEXEの中に持ててもいいんじゃまいか・・・

247 名前:デフォルトの名無しさん :2005/10/20(木) 08:19:11
Macのリソースフォークみたいにな。
ストリームで何かできませんか

248 名前:デフォルトの名無しさん :2005/10/20(木) 10:56:32
Arcで円を書きたいのですが、何か円弧になっちゃうというか、
始点終点を指定してないつもりが指定になってるようです。

完全な円にしたいのですが、どうすれば宜しいでしょうか?

249 名前:デフォルトの名無しさん :2005/10/20(木) 11:09:51
>>248
始点と終点が同じじゃないと円にならないと思われ。
つーか、指定しないことはできないと思うのだが。
ソース晒して味噌。

250 名前:デフォルトの名無しさん :2005/10/20(木) 11:10:14
>>248
始点終点をちゃんと指定する


■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.