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


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

Win32API質問箱 Build46
1 名前:デフォルトの名無しさん :2006/09/25(月) 13:20:14
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

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

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

2 名前:デフォルトの名無しさん :2006/09/25(月) 13:21:06
45 ttp://pc8.2ch.net/test/read.cgi/tech/1156032806/
44 ttp://pc8.2ch.net/test/read.cgi/tech/1151501925/
43 ttp://pc8.2ch.net/test/read.cgi/tech/1148005509/
42 ttp://pc8.2ch.net/test/read.cgi/tech/1144962549/
41 ttp://pc8.2ch.net/test/read.cgi/tech/1141392216/
40 ttp://pc8.2ch.net/test/read.cgi/tech/1138893959/
39 ttp://pc8.2ch.net/test/read.cgi/tech/1136673250/
38 ttp://pc8.2ch.net/test/read.cgi/tech/1133798345/
37 ttp://pc8.2ch.net/test/read.cgi/tech/1131884991/
36 ttp://pc8.2ch.net/test/read.cgi/tech/1128951330/
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/

3 名前:デフォルトの名無しさん :2006/09/25(月) 13:23:02
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

4 名前:デフォルトの名無しさん :2006/09/25(月) 13:24:28
>>1

5 名前:デフォルトの名無しさん :2006/09/25(月) 13:25:15
- MSDN ホームページ
http://www.microsoft.com/japan/msdn/
- MSDN ライブラリ
http://msdn.microsoft.com/library/ja/
- MSDN 2 ライブラリ
http://msdn2.microsoft.com/ja-jp/library/

- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Google
http://www.google.com/

MSDN ライブラリ 2006年6月版
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=373930CB-A3D7-4EA5-B421-DD6818DC7C41
- Platform SDK Update
(WindowsR Server 2003 R2 Platform SDK Full Download)
http://www.microsoft.com/downloads/details.aspx?FamilyId=484269E2-3B89-47E3-8EB7-1F2BE6D7123A
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/

- 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&view=table&D=tech

6 名前:デフォルトの名無しさん :2006/09/25(月) 13:34:33
>>1

7 名前:デフォルトの名無しさん :2006/09/25(月) 13:49:22
>>1
O2


8 名前:デフォルトの名無しさん :2006/09/25(月) 13:56:23
勝手に追加

MSDN日本語版は誤訳があったり、一部欠けていたりするなど不完全なため、英語版推奨。
http://msdn.microsoft.com/library/
http://msdn2.microsoft.com/en-us/library/

おまけ;Windows SDK for Windows Vista RC1の文書。
http://windowssdk.msdn.microsoft.com/en-us/library/

9 名前:デフォルトの名無しさん :2006/09/25(月) 15:26:14
>>1 乙

10 名前:567 :2006/09/25(月) 17:06:55 ?2BP(0)
567が10get
567がお礼に質問に答えるよ


11 名前:デフォルトの名無しさん :2006/09/25(月) 17:30:09
WindowsVistaで動作するアプリケーションを作成しています。
アプリケーションが動作している最中に権限の昇格を行いたいのですが、方法
がわかりません。例えばエクスプローラのようにファイルをコピーする際に権
限昇格を問うダイアログを表示させたいのです。
どなたか方法をご存知の方はご教授願います。


12 名前:567 :2006/09/25(月) 18:24:25
あーそれは知らんな

13 名前:デフォルトの名無しさん :2006/09/25(月) 20:38:58
Vistaはやったことないけど
LogonUser
CreateProcessAsUser
あたりと思う

14 名前:デフォルトの名無しさん :2006/09/25(月) 22:37:17
残りメモリを取得できるAPIとかってありますか?

15 名前:デフォルトの名無しさん :2006/09/25(月) 23:06:41
>>11
多分このへん?

Windows Vista の User Account Control
http://blogs.wankuma.com/jitta/archive/2006/05/24/27760.aspx

翻訳元文書(の上位パッケージ)
Running with Special Privileges
http://windowssdk.msdn.microsoft.com/en-us/library/ms717802.aspx

16 名前:デフォルトの名無しさん :2006/09/25(月) 23:10:14
>>15はAPI的に超かいつまんで言うと、こんな感じのことが書いてある。

PrivilegeCheck
CredUIPromptForCredentials
ImpersonateLoggedOnUser
AdjustTokenPrivileges

17 名前:デフォルトの名無しさん :2006/09/25(月) 23:15:22
BITMAPファイルを読むプログラムを書いてます
BITMAPFILEHEADの次の
・BITMAPCOREHEADER
・BITMAPINFOHEADER
・BITMAPV4HEADER
・BITMAPV5HEADER
のどれかの構造体のメンバの先頭のsizeでこの4つの構造体の区別をしています。

で質問なのですが、sizeの次のメンバ(Width,Height)の情報を読むときに
if(sizeで判断){
BITMAPCOREHEADERの場合
}else{
BITMAPINFOHEADER,BITMAPV4HEADER,BITMAPV5HEADERの場合
}

としています。先頭のメンバはこの4種類の構造体の相対的に同じアドレスに配置されるのは
わかるのですが、2番目、3番目のWidth,Heightもした3つの場合、相対的に同じアドレスにあると考えても
問題ないのでしょうか?構造体のメンバの間に隙間が入ったりしないのでしょうか?

18 名前:デフォルトの名無しさん :2006/09/25(月) 23:27:41
同じ型同じ並びなら隙間が入っても同じだろ…

19 名前:デフォルトの名無しさん :2006/09/25(月) 23:32:10
>>15-16
UAC環境下でrunasしてもやっぱりUACで制限されたアカウントしか得られないんだけど。
昇格のダイアログをプログラムから呼び出すことってできないの?
requireAdministratorを指定したマニフェストを付けたexeを起動するしかない?
exeに署名してないとダメらしいんだが。

20 名前:デフォルトの名無しさん :2006/09/25(月) 23:54:22
>>19
MSいわく、管理者権限が必要な場合は
その処理だけ別のプログラムに分離して
requireAdministratorを指定しろ、とのこと。

署名はなくても昇格ダイアログは表示される。
ユーザーがどう感じるかは別として…。

署名が必要なのは、昇格していないアプリから昇格しているアプリに
Windows メッセージを投げられるようにするやつ(uiAccessだっけ?)。
こっちは昇格ダイアログが表示されないので、署名が必須ってことらしい。

21 名前:デフォルトの名無しさん :2006/09/26(火) 00:01:17
>>19
このへんで同じようなこと嘆いている奴がいるな。
> There really needs to be an API that will prompt the user to move the application to an elevated privilege status.

http://blogs.msdn.com/uac/archive/2006/01/13/512776.aspx

22 名前:デフォルトの名無しさん :2006/09/26(火) 00:05:50
>>11
自分のやりたいタスクを別モジュール化して、CreateProcessAsUserで別ユーザーで呼び出しましょう。
そのときに、特権レベルを偽装してあげると、UACが働くので、ダイアログが表示される。
ただし、UACダイアログで入力したユーザー情報を取ることは不可能。

23 名前:デフォルトの名無しさん :2006/09/26(火) 03:18:17
> ただし、UACダイアログで入力したユーザー情報を取ることは不可能。
CreateProcessAsUserに渡すトークンはどうやって作るの?
CredUIPromptForCredentialsと昇格ダイアログで
パスワード2回入力させる必要があるってこと?
つーかSE_ASSIGNPRIMARYTOKEN_NAMEとSE_INCREASE_QUOTA_NAME
なんて昇格しないと持ってねーよ。
昇格したいから呼び出してるんだっつーの

24 名前:デフォルトの名無しさん :2006/09/26(火) 05:04:33
結局エクスプローラのコンテキストメニューの「管理者として実行」と同じことを
するにはどうしたらいいわけ? Microsoftだけが非公開APIでマニフェストで明示
されていないプログラムでも出したいときにUACのダイアログを出せるの?
SymantecのEUへの申し立てはむちゃくちゃだと今まで思ってたけどその通りなら
一理あるかもと思い始めてきた。

25 名前:デフォルトの名無しさん :2006/09/26(火) 09:30:03
INITCOMMONCONTROLSEXが、

INIT COMMON CONTROLS EXじゃなくて

INIT COMMON CONTROL SEXに見えるのは折だけか?

26 名前:567 :2006/09/26(火) 09:33:46 ?2BP(0)
やっと答えられる質問キタ
>>25
S と L に隙間があるように見えるかという質問ですね
たしかに見えるような気がします

27 名前:デフォルトの名無しさん :2006/09/26(火) 09:39:29
>>26
おまいって香具師はwwww

28 名前:デフォルトの名無しさん :2006/09/26(火) 10:08:20
>>24
>20 じゃダメなのか?

 マニフェスト付きの別 EXEにせずに、マニフェストも無いEXE内のコード
(DLL injection されたものやプラグインかもしれない)から UAC ダイアログを
出して昇格なんかできたら UAC の意味はほぼ全て失われるような気がする。

IE の脆弱性を利用してシステムにいたずらするコードが "Internet Exproler"を
名乗る UAC ダイアログを出して昇格するとか簡単にできちゃう。

29 名前:11 :2006/09/26(火) 11:54:44
ご教授ありがとうございました。
権限昇格して行う処理を別EXEにするしかないんですね。
Visut対応は大変だ・・・orz


30 名前:デフォルトの名無しさん :2006/09/26(火) 18:58:47
やっぱVistaのソフトってXP以前のWindowsと下位互換性ないの?
XP以前のために作られたソフトはもちろんVistaでも動きますよね?

31 名前:デフォルトの名無しさん :2006/09/26(火) 19:00:46
物によっては動かないのもあるだろ
常識的に考えて

32 名前:デフォルトの名無しさん :2006/09/26(火) 19:07:08
セキュリティ面で厳しくなっているようなので、
そこの作りが甘いソフトには嬉しくないかもしれない。

33 名前:デフォルトの名無しさん :2006/09/26(火) 19:09:48
いや、そのへんを細かく制御してるソフトのが逆に動かなくなる可能性大。

34 名前:デフォルトの名無しさん :2006/09/26(火) 19:47:11
何で自分のPCで動かすソフトでセキュリティ云々と叱られにゃならんのか
最近のOSは糞すぎる

35 名前:デフォルトの名無しさん :2006/09/26(火) 19:50:55
なんかユーザ側から、このソフトは信頼できる的な設定とかできねーの?
自分用ツールとかも結構影響受けそうでブルーだ…

36 名前:デフォルトの名無しさん :2006/09/26(火) 19:52:41
そんな設定作ったら自滅だな

37 名前:デフォルトの名無しさん :2006/09/26(火) 20:44:42
>>28
自己解決しますた。
ShellExecute(hWnd, "runas", filename, param, NULL, nCmdShow);
でUACのダイアログが出ますた。
当然
ShellExecute(hWnd, "runas", "rundll32", " unsigned.dll,DoWhateverEvil", NULL, nCmdShow);
とか
ShellExecute(hWnd, "runas", "msiexec", "/i malware.msi", NULL, nCmdShow);
とかも余裕でできちゃって青緑のUACダイアログが出ます
(rundll32.exeやmsiexec.exeはMicrosoftの署名が付いてるから)。
これは「仕様」なのだそうです。
http://blogs.wankuma.com/jitta/archive/2006/07/19/33020.aspx
ShellExecuteの先で何やってるのか相変わらず謎なのが気にくわないですが、
当初の目的(エクスプローラと同じことをやる)は達成できたのでまた暇なときにでも
調べてみます。

38 名前:デフォルトの名無しさん :2006/09/26(火) 20:45:36
どうせみんなAdminで動かすだろ

39 名前:デフォルトの名無しさん :2006/09/26(火) 21:04:10
どうも今晩は、質問させてください

ListViewの左端何列かを固定して、残りの右側を
通常通り横スクロールできるようにしたくて
色々調べてたんですが無理っぽいので
ListViewを左右2つ作って、スクロールを連動させるようにしようと思いました。
で、ListView自体にスクロールバーがついてると、ListViewが二つあることがばれてしまう(?)ので
スクロールバーを非表示にして、スクロールバーコントロールを追加して制御しようと思いましたが
ListViewのスタイルにLVS_NOSCROLLをセットしてもスクロールバーが表示され
しかもヘッダの部分の表示がおかしくなってしまいました
マイクロソフトのサイトで調べてみても
ttp://support.microsoft.com/default.aspx?scid=kb%3Bja%3B137520
こんな感じでなんか日本語じゃなかったのでよくわかりませんでした

ListViewで列固定を実装する方法は無いでしょうか
よろしくお願いします

40 名前:デフォルトの名無しさん :2006/09/26(火) 21:38:46
>>38
VistaではAdminで動かしてもデフォルトで権限は標準ユーザーと同じ。
せめて「どうせみんなUAC切るんだろ」と言ってくれ

41 名前:デフォルトの名無しさん :2006/09/26(火) 22:40:37
>>37
権限昇格が必要なメニューとかボタンには、
Vistaのシールドアイコンをキャプションの隣に付加させるべし、
というガイドラインもある。
アイコンを付加するためのAPIもあるから調べてみて。

もっとも、内輪で使うだけならアイコンはなくてもいいかもしれないけど…。

しかしそういうVista用の処理が入ったアプリを2000やXPで動かすことができるのかね?
自分では試したことがないので知らないんだけど、誰か経験者いる?

42 名前:デフォルトの名無しさん :2006/09/26(火) 22:43:20
>しかしそういうVista用の処理が入ったアプリを2000やXPで動かすことができるのかね?
ハァ?

43 名前:デフォルトの名無しさん :2006/09/26(火) 22:46:41
IEでサブメニューの名前を付けて保存を選択した時の
ダイアログFolderViewのLMV_INSERTITEMWを殺したいのですが
やり方を教えてください。

44 名前:デフォルトの名無しさん :2006/09/26(火) 23:04:00
>>41
> しかしそういうVista用の処理が入ったアプリを2000やXPで動かすことができるのかね?
IDI_SHIELDの取得に失敗したら自前のを使う(か無視する)だけでしょ。
Button_SetElevationRequiredの正体は単に新メッセージを送るマクロだから
古い環境では無視されるだけだし。

ちなみに>>37をXPや2000で実行すると「別のユーザーとして実行」のダイアログが
現れる。

45 名前:デフォルトの名無しさん :2006/09/27(水) 03:42:42
IEの警告とか、ドライバインストール時の未署名の警告みたいに、
Readme.txtにUAC無効にしろって書いてあるソフト出てきそうだな。

46 名前:デフォルトの名無しさん :2006/09/27(水) 08:33:33
そもそもバージョンや環境により実装されてない可能性のあるAPI使う場合はインポートライブラリ使わずにLoadLibrary/GetProcAddress使って呼び出すだろ

47 名前:デフォルトの名無しさん :2006/09/27(水) 12:49:04
決め打ちでインポートして非対応環境では起動すらできないタコなコードの方が多いよ

48 名前:デフォルトの名無しさん :2006/09/27(水) 13:06:18
非対応環境だし。

49 名前:デフォルトの名無しさん :2006/09/27(水) 18:44:48
非対応だとうたっているなら問題ないようなw

50 名前:デフォルトの名無しさん :2006/09/27(水) 19:00:41
僕のアプリはすべての環境において非対応(^O^)

51 名前:43 :2006/09/27(水) 19:01:54
>>43

52 名前:デフォルトの名無しさん :2006/09/27(水) 19:10:26
>>51
フックルーチンをつっこめれば、メッセージを殺すことはできるかも

53 名前:デフォルトの名無しさん :2006/09/27(水) 19:23:34
>>43
殺すとはどういうことをいってるの?
自分デメッセージ処理したらいいだけちゃうの?

54 名前:デフォルトの名無しさん :2006/09/27(水) 19:32:38
先生!質問です!!

dllmainさえ蹴ってくれれば勝手に動くよ系のdllがあったとして
あるプロセスがそのdllをloadlibraryしたあとfreelibraryとかまったく何もせずに
そのままexitprocessしちゃったら もしかしてメモリリークでプギャーですか?
それとも勝手に解放してくれるから気にしなくてもおk?

55 名前:デフォルトの名無しさん :2006/09/27(水) 19:39:26
>>54
まずは君に日本語ランゲージパックをインストールしないと駄目なようだ。

56 名前:デフォルトの名無しさん :2006/09/27(水) 19:53:55
>>51
フックオチンチンをつっこめれば、ソーセージを殺すことはできるかも

57 名前:43 :2006/09/27(水) 19:57:09
>>53

ダイアログをサブクラス化して、非表示にして
POPUPメニューで保存先を選択してるのですが
選択フォルダにファイルが一杯あると、表示されるまで時間がかかるので
フォルダ内にファイルがあっても、空の状態で表示したいのですが

58 名前:デフォルトの名無しさん :2006/09/27(水) 20:01:14
ヒント: 糞仕様・糞設計

59 名前:デフォルトの名無しさん :2006/09/27(水) 20:01:57
そうですか

60 名前:デフォルトの名無しさん :2006/09/27(水) 20:24:41
>>54
>dllmainさえ蹴ってくれれば勝手に動くよ
それなんかヤバげ。

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/dllmain.asp
>The entry-point function should perform only simple initialization or termination tasks.
>Calling functions that require DLLs other than Kernel32.dll may result in problems that are difficult to diagnose.
>For example, calling User, Shell, and COM functions can cause access violation errors,
>because some functions load other system components.

61 名前:デフォルトの名無しさん :2006/09/27(水) 20:31:12
日本語でおk

62 名前:デフォルトの名無しさん :2006/09/27(水) 20:34:57
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdllpro/html/_win32_DllMain.asp

63 名前:デフォルトの名無しさん :2006/09/27(水) 20:45:09
CreateProcessで別のプロセスを起動させてるとか?

64 名前:デフォルトの名無しさん :2006/09/27(水) 20:51:36
>>60レスサンクス

いま考えてるdllのつかいかたとしては
dllmainでお爺様のお脳をファックするだけで終わりで
あとはいい感じにボケた爺様に呼ばれるまで待って
適当に介護する感じのあれを想定してるので
その件については多分おそらく大丈夫っぽいような気がなんとなくします。ありがとう

65 名前:デフォルトの名無しさん :2006/09/27(水) 21:21:40
コミュニケートする気が無いようだ。

66 名前:39 :2006/09/27(水) 21:42:33
どうも今晩は。

やっぱり説明が下手で質問の内容すら伝えられなかったようなのであきらめました。
どうもありがとうございました。

67 名前:デフォルトの名無しさん :2006/09/27(水) 21:45:42
>>57
なんでわざわざダイアログをサブクラス化したりしてるのか謎い。
IEをつかわせつつ、IEの機能を限定してるとかって事?

だったら、create系メッセージから全力でメッセージ殺しまくればいいんじゃね?
要はダイアログが自分の初期化してるから、カレントディレクトリとか読んで重くなるってことだろ?
初期ディレクトリをファイルのないダミーディレクトリにして初期化させるとかって手もあるかも。
というか、保存先は自分が解ってるのに、なんでダイアログを初期化させてんの?
ますます解らん。w
根本の思想が理解できないし、そもそも何やりたいのさ。

68 名前:デフォルトの名無しさん :2006/09/27(水) 22:04:55
質問してる奴も言葉足らずなのばっかりだけどさ
読めない読めない言う奴って何がしたいの?
つーか読めないなら黙ってればいいじゃん。いやマジで。

読めないから質問を変えろ、俺が読めないから諦めろ、みたいな事いう奴もいるし
俺様が回答できる質問以外は人類未踏とでも言わんばかりのキチガイっぷり晒してる事にいい加減気付け

69 名前:57 :2006/09/27(水) 22:22:05
>>67

元々は、IEの名前を付けて画像を保存などを選択した時に
保存しようとしているファイルのパスを取得して
独自の保存先選択POPUPメニューで保存したかったのですが
パスの取得が出来なかったので
現在は、IEの保存ダイアログを利用して独自POPUPメニューでダイアログに保存先をセットして
ダイアログのOKボタンを自動で押して保存しています

IEの保存ダイアログの、ディレクトリを表示前に変更出来るんですか?

70 名前:デフォルトの名無しさん :2006/09/27(水) 22:33:30
要するに究極的にはIEの保存ダイアログをやめて
自前のポッポアッポ型インターフェースに置き換えたいって事だよね

インポテーブルをハクってゲトズザーじゃだめなのかな

71 名前:57 :2006/09/27(水) 23:36:18
>>70
ありがとう
調べながらやってみます。

72 名前:デフォルトの名無しさん :2006/09/27(水) 23:55:28
>>57->>71
69の目的ならIEの右クリックメニュー自体を拡張してしまうってのはどうなのかな?
例えば、↓見たいな感じで。
ttp://support.microsoft.com/default.aspx?scid=kb;ja;177241
ttp://www.rocaz.net/rclick/howtomenu.html
ttp://www.ava-soft.com/products/srie/help/iemenuref.htm

ググればもっと情報があるし、サンプルも沢山あるよ。
もしかしたら69の目的そのもののサンプルも見つかるかも。

73 名前:57 :2006/09/28(木) 00:29:19
>>72
試したことがあるんですが、
HPによっては正確に取得できない場合があったので
やめました。
IHTMLDocumentからの取得もやったのですが
IEにやってもらうのが、一番正確で楽だったので
この方法でやってます。

74 名前:デフォルトの名無しさん :2006/09/28(木) 03:13:23
WindowsXPでマイコンピュータをクリックして出るウィンドウ。
一番下にネットワークドライブの欄がありますよね。
ここに「切断されたネットワークドライブ」とあるのをクリックすると、
切断状態が解除され接続状態になりますけど、
これらの操作をAPIで行うのはどうやればいいのでしょうか?

ネットワークドライブのリストアップと、見つかったドライブのうち
なんらかの方法で接続状態に持っていく方法がわかればと思っています。

75 名前:デフォルトの名無しさん :2006/09/28(木) 03:33:13
WNetEnumResources, WNetAddConnection2

76 名前:デフォルトの名無しさん :2006/09/28(木) 06:55:31
しょぼい質問で恐縮ですがよろしくお願いします。

症状:矢印キーでコントロール間のフォーカスがエディットの部分だけ動かない

リソーススクリプト抜粋
BEGIN
EDITTEXT IDC_EDIT1,4,23,117,14,ES_RIGHT | ES_AUTOHSCROLL |
WS_EX_STATICEDGE | WS_TABSTOP | WS_GROUP
EDITTEXT IDC_EDIT2,3,62,117,14,ES_RIGHT | ES_AUTOHSCROLL |
WS_EX_STATICEDGE

PUSHBUTTON "決定ボタン",IDC_BUTTON1,196,17,79,25,WS_TABSTOP | WS_GROUP
PUSHBUTTON "終了ボタン",IDC_BUTTON2,195,49,79,25

CHECKBOX    "チェック1",IDC_CHECK1,6,9,119,14,WS_TABSTOP | WS_GROUP

CHECKBOX    "チェック2",IDC_CHECK2,6,47,119,14

END

EDITTEXTのコントロール間だけ、矢印キーを押してもフォーカスが移動しません。
グループ化して矢印キーでIDC_EDIT1とIDC_EDIT2間を移動させたいのですが、どの部分が問題なのかが
判明しません。グループ化も出来ていると思うのですが‥

77 名前:デフォルトの名無しさん :2006/09/28(木) 07:06:48
そりゃ矢印キーはエディットコントロールが使うから。

78 名前:デフォルトの名無しさん :2006/09/28(木) 07:22:56
>>77
なるほど。
なんでもグループ化すればそのコントロール間で作用すると思い込んでいました。
別の方法で打開策を考えようと思います。
ありがとうございました。

79 名前:デフォルトの名無しさん :2006/09/28(木) 11:15:35
>>78
別の方法で打開しない方がいいぞ。それはWindowsの一般的な挙動だ。
普通はコントロール間のフォーカス移動はタブキーを使う。

80 名前:デフォルトの名無しさん :2006/09/28(木) 11:44:48
タブはコントロール間ではなくタブグループ間の移動だが。

81 名前:デフォルトの名無しさん :2006/09/28(木) 12:31:46
CreateFile関数の質問です。
現在こうゆう風にパラメーターを使ってます。

CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, .....);

ファイル読み込み中も他のプロセスが書き込みできるように
FILE_SHARE_WRITE付けたのですが、この場合、もしファイルを
読み込んでいる途中に他のプロセスがファイルの上書きを
始めて、そっちの方がスピードが速かったら、読み込むデータも
途中から新たに上書きされたものになってしまうのでしょうか?


例:

現在のファイルの内容:
AAAAAAAAAA

他のプロセスが上書きする内容:
BBBBBBBBBB

FILE_SHARE_WRITEを付けると、読み込むファイルがこうなる可能性がある?
AAAAABBBBB


82 名前:デフォルトの名無しさん :2006/09/28(木) 12:49:02
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpfileio/html/_win32_lockfile.asp

83 名前:デフォルトの名無しさん :2006/09/28(木) 17:12:34
>>75
ありがとうございます。

84 名前:デフォルトの名無しさん :2006/09/28(木) 18:45:55
WinMainの第一引数のHINSTANCEとGetModuleHandle(NULL)の戻り値は常に同じ?
HINSTANCEをグローバル保存しておくソースを見るんで置き換えてグローバル減らしたいんですが

85 名前:デフォルトの名無しさん :2006/09/28(木) 18:58:34
GetWindowLong( hWnd, GWL_HINSTANCE);もずっと同じ

でもその1つのグローバル変数減らしてなんか得することあるの?
g_hInstance とかで保存したほうがぱっと見て内容がわかるから使いやすいと思うんだけど。

これは人それぞれか。

86 名前:デフォルトの名無しさん :2006/09/28(木) 19:31:23
>>85
ありがとう

得することは、多分、ないですけどね…
g_hInstance は事実上不変の定数だから管理とかないし

87 名前:デフォルトの名無しさん :2006/09/28(木) 21:54:24
俺は、<windowsx.h>のGetWindowInstance派。

でもATL/WTL使い出したら、ATLが内部でグローバルにインスタンスハンドルを持っていたので、
今はそれを使っている。

88 名前:567 :2006/09/28(木) 23:07:28 ?2BP(0)
オレは両方派
main.c内では
static HINSTANCE g_hInstance;
で他のファイルでは
GetWindowLong( hWnd, GWL_HINSTANCE);

これが一番でしょ


89 名前:デフォルトの名無しさん :2006/09/29(金) 12:39:50
リッチエディットボックスで右クリックメニューが出ないんですが、
エディットボックスと同じメニューを出すにはどうしたらいいですか?

90 名前:デフォルトの名無しさん :2006/09/29(金) 13:10:42
コンボボックスの表示について質問なんですが、どうしてもコンボボックスの項目が追加できなくて困っています。

リソースで
#define IDC_COMBO1 4000

IDD_COMBO DIALOGEX 50,25,281,87
FONT 9, "MS ゴシック"
STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_SYSMENU
BEGIN
COMBOBOXIDC_COMBO1,4,23,117,14,CBS_DROPDOWNLIST | WS_VSCROLL
END

ソースファイルにて
DialogBox関数でDiaProcをプロシージャとして登録し、
そのDiaProcの中で
switch( msg )
{
case WM_INITDIALOG:
      if( SendMessage( GetDlgItem( hwnd,IDC_COMBO1 ),CB_ADDSTRING,0,(LPARAM)"test") == CB_ERR)
return FALSE;
SendDlgItemMessage( hwnd,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)"test");
SendMessage( GetDlgItem( hwnd,IDC_COMBO1 ),CB_INSERTSTRING,1,(LPARAM)"test");
SendMessage( GetDlgItem( hwnd,IDC_COMBO1 ),CB_INSERTSTRING,2,(LPARAM)"test");
SendMessage( GetDlgItem( hwnd,IDC_COMBO1 ),CB_INSERTSTRING,3,(LPARAM)"test");
SendMessage( GetDlgItem( hwnd,IDC_COMBO1 ),CB_INSERTSTRING,4,(LPARAM)"test");
return TRUE;
みたいなことをしてなんとか文字を出そうと試みてるんですが、実行してみるとコンボボックスのみが表示されてその項目が全く表示されません。
プレークポイントを使って確認した所確かに通っているし、エラーで終わっている様子もありません。
項目追加のメッセージなどを送って文字列を表示させてるつもりなんですが‥


91 名前:デフォルトの名無しさん :2006/09/29(金) 13:15:14
88のmain.cに泣いた

92 名前:デフォルトの名無しさん :2006/09/29(金) 13:19:12
>>88
(´;ω;`)ブワッ

93 名前:90 :2006/09/29(金) 13:21:58
すみません。やっと分かりました。
自分はてっきり一行の高さを設定するだけでドロップダウンが機能して全て表示できるものだとばかり思ってました。
なにげにほとんど見えない項目をクリックしたらその文字が表示されました。
ここに質問として書いてちょっと間をあけたから頭の切り替えが出来たのかもしれません。
どうもお騒がせしました。


94 名前:デフォルトの名無しさん :2006/09/29(金) 14:10:00
DLL/EXE 共用でなんとかしようとすると、グローバル変数(のようなもの) じゃないと苦しいね。
DLL 内のコードで GetModuleHandle(NULL) すると、Loadされたアプリケーション側のインスタンス返すし

# それでも初期化するのに、エントリポイントいじくったりしないと都合が悪くなることも…

95 名前:567 :2006/09/29(金) 14:57:33
よぉ

96 名前:567 :2006/09/29(金) 15:05:28
>>93
あー、まあいいよ俺が許す
次からは気をつけろよ

97 名前:デフォルトの名無しさん :2006/09/30(土) 14:12:34
おーい

98 名前:デフォルトの名無しさん :2006/09/30(土) 16:19:51
VisualStudio.NET 2003 の VC++ で開発してます。

CreateWindowEx() で、 dwExStyle に WS_EX_NOACTIVATE を指定してビルドしたら、
「error C2065: 'WS_EX_NOACTIVATE' : 定義されていない識別子です。」と言われてしまいました。

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_createwindowex.asp
にならって Winuser.h / Windows.h の両方をインクルードしているのですが・・・なぜでしょうか?

99 名前:98 :2006/09/30(土) 16:20:32
VC++インクルードディレクトリを「WS_EX_NOACTIVATE 」で検索してみたのですが、やっぱり見つかりませんでした。


100 名前:98 :2006/09/30(土) 16:22:07
たびたびすみません。

>>98のMSDNを良く読むと

 WS_EX_NOACTIVATE Windows 2000:

って書いてあります。
WindowsXP上で開発してるんですが、それが原因なのでしょうか?まさか〜

101 名前:デフォルトの名無しさん :2006/09/30(土) 16:51:43
WINVERとか_WIN32_WINNTじゃねえの?知らんけど。

102 名前:デフォルトの名無しさん :2006/09/30(土) 16:57:29
PlatformSDKには入ってるようだが。

103 名前:デフォルトの名無しさん :2006/09/30(土) 19:18:36
ダイアログベースのときの話なんだけど
WM_CREATEが来た時点でメイン窓のHWNDは確定してるのに、その子コントロールのHWNDが取得できない。

多分CreateWindow終わるまでは、まだ生成されてねーよってことだと思うんだけど、
この子コントロールのハンドル取得して初期化する場合に使えるメッセージってあります?

104 名前:デフォルトの名無しさん :2006/09/30(土) 19:20:56
WM_INITDIALOG

105 名前:デフォルトの名無しさん :2006/09/30(土) 19:52:41
わかりづらくてスマン 
要するに↓なカンジの作り方した場合だね
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win89.html
WM_CREATEでGetDlgItemとかしても成功しない

WM_CREATEやWM_INITDIALOGみたいに最初に1度だけ飛んできて
かつ子供のハンドル取れるメッセージってあるのかなーと思って(´・ω・`)

106 名前:デフォルトの名無しさん :2006/09/30(土) 19:54:49
WM_CREATEのデフォルトプロシージャを呼んだ後に処理すれば?

107 名前:デフォルトの名無しさん :2006/09/30(土) 20:21:19
WM_CREATEの中で、自身へ向けてメッセージをポストしておくというのはどう?
そうしたらそれを受け取るのはメッセージループが始まった後。

108 名前:デフォルトの名無しさん :2006/09/30(土) 20:27:23
なぜWM_INITDIALOGを使わない?
同じ事をするメッセージが複数必要なのか?

109 名前:デフォルトの名無しさん :2006/09/30(土) 20:40:43
CreateDialogのプロシジャの引数にNULL渡して、メッセージ処理は登録した窓クラス使うから
WM_INITDIALOGはこないのよ
そんなに>>105なら完全なダイアログベースにしとけってことか(´・ω・`)

素直に>>107か初期化専用の関数でもCreateDialog後に置いときます

110 名前:デフォルトの名無しさん :2006/09/30(土) 20:47:48
>>107も結構問題があるから気をつけろ。
ポストしたメッセージが、コントロールが作られるより早く飛んできても文句は言えない。

111 名前:567 :2006/09/30(土) 21:00:59
久々に質問したいんだけどいい?

112 名前:デフォルトの名無しさん :2006/10/01(日) 01:22:19
>>109
FALSE を返すだけのダミーのダイアログボックスプロシージャを指定すれば、
WM_CREATE と WM_INITDIALOG の両方が飛んでくるようになるよ。

113 名前:105/109 :2006/10/01(日) 01:43:35
112

114 名前:105/109 :2006/10/01(日) 01:44:58
送信しちまった('A`)
>>112は面白いね 勉強になります

115 名前:567 :2006/10/01(日) 07:42:04
しけてんなーここ。誰か反応しろよ

116 名前:567 :2006/10/01(日) 10:47:14
頼むよー、誰か相手してくれよー。
学校じゃ俺が話しかけるとみんな逃げていくし、最近親も俺から目線そらすようになって・・・
2chだけなんだよ、おれが自分でいられるのは。


117 名前:デフォルトの名無しさん :2006/10/01(日) 12:03:44
何をいきなり。
誰か反応しろと言われてもどう反応すればいいんだ?
そんな、俺は何もしないけどお前ら俺に構ってくれというような奴は
嫌われて当然じゃないのか?

118 名前:567 :2006/10/01(日) 12:49:32
知りたいのはVistaでWFP回避する方法なんだよー。
あと未署名のカーネルドライバを勝手にすりこませる方法な。
実行中のIEの権限を引き上げることのできる穴もヨロシク。

119 名前:デフォルトの名無しさん :2006/10/01(日) 12:52:29
ウイルスを作ろうとしているお方が現れた。
コマンド?

→通報



120 名前:デフォルトの名無しさん :2006/10/01(日) 13:07:03
質問なんですが、みなさんはCで書いてるんですか?
それともC++で書いてるんですか?
自分は、猫でも・・の本を一通りやってうんざりして
今は、mfcってやつで色々いじってるんですが
どうなんでしょうか。
初心者なんで、mfcからで良いかと勝手に思ってるんですが。
(win32APIリファレンスの本と同じ関数も多いし)
やはりC++なら、APIをラッパにして、STL使ってって感じ
でしょうか。
まだまだC++のレベルもクズたれですが、どうもそこら辺が
気になって質問指していただきました。
API関連の書き込みでなくて、申し訳ありません。


121 名前:デフォルトの名無しさん :2006/10/01(日) 13:17:54
好きなようにすればいいと思うよ。
プログラミングスタイルなんて人によって違う。
(チーム開発だとルールを強要されるが)

122 名前:デフォルトの名無しさん :2006/10/01(日) 13:26:56
>>120
何を作りたいかによるんじゃない?
例えば、ExcelやAccessでデータ管理のツールを作りたければVBAになるんだろうし。

123 名前:567 :2006/10/01(日) 13:47:08
>>119
おまえ、エスパー? ウィルスだってなんでわかったの?
カーネルドライバのウィルスって最強だと思わない?
おれにしか作れないだろ。


124 名前:デフォルトの名無しさん :2006/10/01(日) 14:12:20
>>123
あのな、>>118みたいな質問してる時点でもうお前は厨なんだよ。

125 名前:デフォルトの名無しさん :2006/10/01(日) 14:12:44
相手にする奴も同レベル

126 名前:デフォルトの名無しさん :2006/10/01(日) 14:14:32
自分でデジタル署名すればいいがな。

127 名前:デフォルトの名無しさん :2006/10/01(日) 14:39:08
見えないレス番とアンカ-が多すぎます

128 名前:デフォルトの名無しさん :2006/10/01(日) 15:12:57
ねたにまじれすかこういい

129 名前:デフォルトの名無しさん :2006/10/01(日) 15:34:02
こんばんわ
USBストレージが接続されたことを検知するにはどうすれば(どのAPI)を使えばよいのでしょうか?

よろしくお願いいたします。

130 名前:デフォルトの名無しさん :2006/10/01(日) 15:52:32
ビデオ信号を切断するAPIを探しています。
ChangeDisplaySettings
というAPIを見つけて近づいたと思ったのですが
これ以上近づけませんでした。何か良いAPIはありませんでしょうか?

131 名前:デフォルトの名無しさん :2006/10/01(日) 16:14:04
>>129
WM_DEVICECHANGE

132 名前:デフォルトの名無しさん :2006/10/01(日) 16:43:24
>>130
BideoSingouSetudan

133 名前:デフォルトの名無しさん :2006/10/01(日) 18:46:16
NTFS などのファイルシステムが持ってるファイルの CRC 値って
Win32 API 経由で取り出すことが可能ですか?
今は、自分でファイルの CRC を計算してるんですが、
ファイルシステムからとりだせれば、その分スピードがはやくなるので。


134 名前:デフォルトの名無しさん :2006/10/01(日) 18:49:18
>>133
NTFSにそんなもんがあるとは聞いたことないが、情報源は?

135 名前:デフォルトの名無しさん :2006/10/01(日) 18:51:04
ヒント:脳内

136 名前:デフォルトの名無しさん :2006/10/01(日) 19:18:01
自分で速いコードを書けばよし

137 名前:デフォルトの名無しさん :2006/10/01(日) 19:30:19
脳内から取り出すAPIが確かあったと思う

138 名前:デフォルトの名無しさん :2006/10/01(日) 19:32:22
電波を受信するAPIを探しています。
この電波というのは物理層を経由しない方の電波です。

139 名前:567 :2006/10/01(日) 19:36:09
そんな糞みたいな質問構わなくていいから
さっさとオレの質問に答えろよ

140 名前:デフォルトの名無しさん :2006/10/01(日) 19:49:36
質問してくれないと答えられない。
以前質問したことをもう1度と言うのなら、悪いがもう1度書いてくれ。

141 名前:567 :2006/10/01(日) 20:34:50
>>140
前に書いてるんだから探せよ
それぐらい出来ないのか、バカかおまえ


142 名前:デフォルトの名無しさん :2006/10/01(日) 20:36:01
明らかに質問者の態度じゃないことに気付いてるのだろうか?

一応釣りだと信じてる…

143 名前:デフォルトの名無しさん :2006/10/01(日) 20:36:10
バカ耐性が低いのが居るな
華麗にヌルーしとけ

144 名前:デフォルトの名無しさん :2006/10/01(日) 20:37:59
NULL-

145 名前:デフォルトの名無しさん :2006/10/01(日) 21:40:17
ヌルってるかどうかのエラーチェックは怠るべきではありません

146 名前:デフォルトの名無しさん :2006/10/01(日) 21:45:10
正常系のコードだけ書けばよい

147 名前:デフォルトの名無しさん :2006/10/01(日) 22:17:00
コーディング全般な話になるけど
エラーなら処理中断させる方法と、
if (args == NULL) return;
...続く

正常なら処理を継続させる方法があるよね
if (args) {
 ...続く
}

どっちが好きだい?

148 名前:デフォルトの名無しさん :2006/10/01(日) 22:18:40
>>147
俺は後者が癖になってるけど、後者はネストが深くなるから前者の方がいいと思ってる。

149 名前:デフォルトの名無しさん :2006/10/01(日) 22:20:19
状況によりけり。

150 名前:デフォルトの名無しさん :2006/10/01(日) 22:26:48
Cだとリソース解放のことを考えて後者にしていたけど、
C++を始めてからは、デストラクタで対処できるので前者にしている。

151 名前:567 :2006/10/01(日) 22:33:01
どっちでもいいだろ、スレ違いな話はよそでやれや

152 名前:133 :2006/10/01(日) 23:22:49
>>134
エクスプローラでファイルをコピーしようとするとたまに、
CRC エラーが出るので、てっきりファイルシステム内に
CRC 値が保存してあるのだとばかり思ってましたが、
違うんでしょうか?


153 名前:デフォルトの名無しさん :2006/10/01(日) 23:38:41
たぶんHDDコントローラが吐いたエラーだな。

154 名前:デフォルトの名無しさん :2006/10/01(日) 23:47:09
>>152
重要なメタデータとかならともかくファイル全体のCRCはないだろ。
CRCの計算量はそれほど大きいわけでもないが、
書き込むたびに毎回というと話は別だ。

155 名前:デフォルトの名無しさん :2006/10/01(日) 23:51:40
MMCでユーザの管理スナップインなどを追加すると
「コンピュータの選択」というダイアログが出てきますが
このダイアログを呼び出すAPIは何でしょう?そもそも共通になってない?

156 名前:133 :2006/10/02(月) 00:19:55
>>153
>>154
てっきりファイルシステムがファイルのCRC値を
保存してるんだと思ってました。

ありがとうございました。

157 名前:デフォルトの名無しさん :2006/10/02(月) 01:17:07
じゃあエクスプローラが吐く
「巡回冗長(CRC)エラー」ってなんなんだろうな

158 名前:デフォルトの名無しさん :2006/10/02(月) 01:22:28
デバイスが返してくるリードエラー

159 名前:デフォルトの名無しさん :2006/10/02(月) 01:37:35
じゃあ、デバイスはどこに CRC 値を保存しているんだろう?
書き込むときにどこかに保存しているから、
読み込むときに比較が可能なのではないかと思うんだが。

160 名前:デフォルトの名無しさん :2006/10/02(月) 01:38:30
ディスクの構造を勉強してこい

161 名前:デフォルトの名無しさん :2006/10/02(月) 01:55:56
デバイスが吐くのは毎回の転送データのCRC
そもそも連中はファイルなんていう論理単位は認識してない

162 名前:デフォルトの名無しさん :2006/10/02(月) 08:51:11
「なんなんだろうな」とか「思うんだが」とか散々偉そうに煽っといて
実はそれは自分の無知だったって、すごい滑稽だな。

163 名前:デフォルトの名無しさん :2006/10/02(月) 09:31:51
プログラマならVistaに移行するよな?

GetTickCount64

Retrieves the number of milliseconds that have elapsed since the system was started.

ULONGLONG WINAPI GetTickCount64(void);

Parameters
This function has no parameters.
Return Values
The number of milliseconds.
Remarks

This function is limited to the resolution of the system timer. To obtain the system timer resolution, use the GetSystemTimeAdjustment function.

If you need a higher resolution timer, use a multimedia timer or a high-resolution timer.
Requirements
Client Requires Windows Vista.
Server Requires Windows Server "Longhorn".
Header

Declared in Winbase.h; include Windows.h.
Library

Use Kernel32.lib.
DLL Requires Kernel32.dll.

164 名前:デフォルトの名無しさん :2006/10/02(月) 09:54:41
>>163
GetTickCount()は、さほど高い精度を要求されないところで使うものだと思うが。
ゲームだったらこれまでどおり、high-resolution timerを使うはずだし。

そもそも問題は、Vista以降でしか動かない。
しばらくは、すくなくともXPもサポートしなければならないだろうし。

165 名前:デフォルトの名無しさん :2006/10/02(月) 10:03:44
>>164
システムタイマが64ビットになったことで、

「windows起動後49日後に〜」
ってことを考慮する必要がなくなっただけでもありがたいんでない?

166 名前:デフォルトの名無しさん :2006/10/02(月) 10:11:17
>>165
まあ、たしかに64bitだったら、オーバーフローするまえにハード自体が現存してないだろうけどね。

167 名前:デフォルトの名無しさん :2006/10/02(月) 10:26:34
>>164 >>166
釣られるなって。 どう見てもまともなWin32APIの質問じゃないだろ。
「かまって君」はスルーが基本!


168 名前:デフォルトの名無しさん :2006/10/02(月) 10:57:12
前世紀から指摘されてるのに今更tick 64bit化すか

169 名前:デフォルトの名無しさん :2006/10/02(月) 11:05:04
FtpSetCurrentDirectory(hSession, "..")
とすると戻り値がFalseになるのですが
なぜでしょうか?
一応上の階層に上がっているようなのですが
戻り値だけFalseなので不思議です。

170 名前:デフォルトの名無しさん :2006/10/02(月) 11:08:41
つ GetLastError

171 名前:デフォルトの名無しさん :2006/10/02(月) 11:20:08
ラップアラウンド位プログラム側で対応しろと思わなくもない。
RTPのシーケンス番号なんか16bit&開始値が乱数だぞ。

172 名前:デフォルトの名無しさん :2006/10/02(月) 11:48:37
むしろラップアラウンドでバグるようなコード書いてる
プログラマを見てみたい。

173 名前:デフォルトの名無しさん :2006/10/02(月) 11:51:57
グローバルフックでウィンドウの表示と非表示を監視するには
WH_CALLWNDPROCでどのメッセージを見ればよいのでしょうか

174 名前:デフォルトの名無しさん :2006/10/02(月) 22:39:27
>>162
独り言?


175 名前:デフォルトの名無しさん :2006/10/02(月) 23:05:49
>>173
WM_WINDOWPOSCHANGED

176 名前:デフォルトの名無しさん :2006/10/03(火) 01:07:53
>>173
WM_KILLFOCUS

177 名前:デフォルトの名無しさん :2006/10/03(火) 08:15:13
VistaでUACってのを出して昇格したいけど、どのAPIかわからんのです。
VistaでProgram Files配下のプログラムの上書き、新しいリソースのダウンロードからの追加がしたい。
インストーラーで入れたプログラムフォルダ内に
プログラムからzip解凍してリソース展開しようとしたけど、Usersに書きこみ権限がない。
それっぽい過去ログありましたがセキュリティーホールになるから不可みたいに見えます。

178 名前:デフォルトの名無しさん :2006/10/03(火) 19:40:11
フックを使ってウィンドウの×ボタンを押しても閉じずに最小化させるプログラムを作りたくて、
とりあえず、WM_CLOSEとWM_DESTROYをフックプロシージャで
捕まえて、return TRUEのように返すようにしたのですが、
うまくいかずに閉じてしまいます。
なぜか×をクリックするとWM_DESTROYが永遠とsendされ続けるようで。

なんかアドバイスお願いします。

179 名前:デフォルトの名無しさん :2006/10/03(火) 20:07:32
外部リンクにしてる?

180 名前:179 :2006/10/03(火) 20:09:43
ああカンチガイ。
自分自身のウィンドウの×ボタンか。

WM_DESTROYは捕獲しちゃいけないだる。


181 名前:デフォルトの名無しさん :2006/10/03(火) 20:27:07
いえ、自分自身ではないです。
今は、ためしにノートパッドをグローバルフックしてみてます。
「猫でもわかる」の↓を参考に。
http://www.kumei.jp/c_lang/sdk2/sdk_163.htm

WM_CLOSEを捕まえて、メッセージボックスを出すことはできるのですが
そのメッセージを破棄することができません。
それで、一応WM_DESTROYも殺そうかと思ってやってみたら、
WM_DESTROYがたくさん(次次と)来てたって感じです。

フックプロシージャで、
,,,
lp->message == WM_CLOSE ){
MessageBox(NULL , "メモ帳へWM_CLOSE","確認" , MB_OK | MB_TOPMOST );
return TRUE;
}
...

のようにしてます。

182 名前:デフォルトの名無しさん :2006/10/03(火) 20:28:57
,,,
lp->message == WM_CLOSE ){
MessageBox(NULL , "メモ帳へWM_CLOSE","確認" , MB_OK | MB_TOPMOST );
return TRUE;
}

これの何処でメッセージが殺されてるんだ

183 名前:178=181 :2006/10/03(火) 20:36:22
>>182
CallNextHookExで次のフックに渡さずにTRUEを返せば、
メッセージって死ぬのではないのでしょうか。
できれば、殺し方教えてください。

キーフックのときは上記のやり方でうまくいってたのですが。

184 名前:デフォルトの名無しさん :2006/10/03(火) 20:36:45
>>181
The CallWndProc hook procedure can examine the message, but it cannot modify it.
The GetMsgProc hook procedure can examine or modify the message.

So use WH_GETMESSAGE.


185 名前:デフォルトの名無しさん :2006/10/03(火) 20:51:06
>>183
メッセージフックでメッセージを殺す場合は、メッセージの存在を消すことは出来ないので
WM_NULLに書き換えるんだよ。

186 名前:178 :2006/10/03(火) 21:07:58
なぜか、WH_GETMESSAGEだとWM_CLOSEが捕まらないです。

187 名前:デフォルトの名無しさん :2006/10/03(火) 21:14:35
フック関数内でターゲットのウィンドウをサブクラス化して
乗っ取ったウィンドウプロシージャ内で破棄するという手もある。

188 名前:デフォルトの名無しさん :2006/10/03(火) 21:15:42
>>186
WH_GETMESSAGEはポストされたメッセージしか捕まらない。
送信されたメッセージはWH_CALLWNDPROC
だから>>185>>187ということだ

189 名前:デフォルトの名無しさん :2006/10/03(火) 21:20:01
>>177
>>37は見たか?
昇格のダイアログが出てユーザーに押させる必要があるのはかまわないんだよな?
なおアップデートのボタンには盾アイコンを付けるように(>>41)

無断で更新する必要がある場合は(ウィルススキャンソフトの定義ファイルとか)
初回のインストール時にサービスをインストールしてサービスから更新する。
当然そのサービスはどんな悪意のあるプログラムから呼ばれても問題のないように
設計されていなければならない。

190 名前:デフォルトの名無しさん :2006/10/03(火) 21:32:02
はじめまして。APIの質問はここでいいんですよね?
今アプリケーションからタイムゾーンのロケールを変更するプログラムを作っているのですが、
うまくいきません。
VS2005 C#でプログラムしています。
TimeZoneInformationを使えばいいですよね?
そこで、kernel32.dllを読みこんで、
struct TIME_ZONE_INFORMATION
{
public int Bias;
public string StandardName; // StringBuilder 32
public SYSTEMTIME StandardDate;
public int StandardBias;
public string DaylightName; // StringBuilder 32
public SYSTEMTIME DaylightDate;
public int DaylightBias;
}

をHP(http://custom.programming-in.net/articles/art9-1.asp?f=SetTimeZoneInformation
を参考にして書いたのですが、どうやって使うかがわかりません(恥ずかしながら)
Biasって何を格納するの?とかそんなレベルです。

どなたかわかる方教えていただけないでしょうか?
お願いします。



191 名前:デフォルトの名無しさん :2006/10/03(火) 21:37:17
まず MSDN その他で SetTimeZoneInformation と TIME_ZONE_INFORMATION を調べれ

192 名前:178 :2006/10/03(火) 21:54:49
>>187
>>188
サブクラス化でできました。
ありがとうございました。

>>185
>>188
WM_NULLで書き換えてCallNextHookExでは、
>>184氏の言ってるようにうまくいきませんでした。

193 名前:デフォルトの名無しさん :2006/10/03(火) 23:24:02
>>181
WM_DESTROYはDestroyWindowを呼び出した結果やってくるメッセージだから、
握り潰してもウィンドウは削除されると俺は思っていたのだが、違うのか?

194 名前:デフォルトの名無しさん :2006/10/03(火) 23:24:56
USE接続されたデバイスが、どのデバイス識別子(A、C、Dなど)になったかを知るためには
どうすればよいのでしょうか?

よろしくお願いいたします。

195 名前:デフォルトの名無しさん :2006/10/03(火) 23:25:30
すいません、訂正します。

USEじゃなくてUSBです。

196 名前:デフォルトの名無しさん :2006/10/03(火) 23:31:11
>>193
WM_CLOSEを破棄できたってことでしょ

197 名前:デフォルトの名無しさん :2006/10/04(水) 00:18:26
195
WM_DEVICECHANGEのDBT_DEVICEARRIVALの
DEV_BROADCAST_VOLUMEのdbcv_unitmask

198 名前:195 :2006/10/04(水) 00:46:03
>>197
解決しました
ありがとうございました

助かります

199 名前:デフォルトの名無しさん :2006/10/04(水) 01:47:28
class A
{
int x ;
public:
static int CALLBACK Func(...)
}

こんな感じであるときにCALLBACK関数内からint x(プライベート変数やポインタ)
を呼び出す方法はありますか?

200 名前:デフォルトの名無しさん :2006/10/04(水) 02:06:00
class A
{
int x ;
public:
static int CALLBACK Func(A* pThis)
{
pThis->x;
}
}

A a;
A::Func(&a);

とか?

201 名前:デフォルトの名無しさん :2006/10/04(水) 02:10:44
・CALLBACK 関数の引数に(void* とかの)融通が利く部分があるなら (_beginthread系)
class A へのポインタを渡して(キャスト等して)から参照

・static class A* ThisPointer; をクラスで持って
CALLBACK関数が呼びだされる前に this をセットしておき、ThisPointerから参照。

APIスレでこのケースとなると… WNDPROC系?
ウインドウハンドル と class A のポインタのマップから 無理やり該当オブジェクトポインタ得る とか
ウインドウハンドルの拡張領域 に class A のポインタを仕込むとか

202 名前:デフォルトの名無しさん :2006/10/04(水) 02:17:04
WNDPROC系なら、SetProp, GetPropとか

203 名前:デフォルトの名無しさん :2006/10/04(水) 03:28:10
>>200-202
ありがとうございます。すいませんもっとしっかり書くべきでした

static BOOL CALLBACK DialogProc(HWND hWnd , UINT mes ,
    WPARAM wParam , LPARAM lParam)

やりたいのはダイアログです。スレッドの場合は知っていたのですが
ダイアログの場合LPVOID型を持たせたりする
ところがないので悩んでました

>>201さんの2番目のやり方って
>static class A* ThisPointer;
をクラス内の変数で持っておいてコンストラクタで A* A::ThisPointer = this ;
ってやるとエラーになるんですけどどうやって初期化(定義?)したらいいんでしょうか?

204 名前:203 :2006/10/04(水) 03:50:35
解決しました。static変数をよく理解してませんでした
classの関数の外で宣言しないといけないんですね。。。

205 名前:デフォルトの名無しさん :2006/10/04(水) 09:06:57
static メンバ使う場合
クラスAの派生Bの Dialog中から さらに クラスAの派生C を生成し Dialog を呼び出したりすると
期待した動作ができなくなるので注意して

# MS も CALLBACK に一通りアプリケーション作成者用の LPVOID 枠用意しとけばよかったと
# 後悔しているんだろな…

206 名前:デフォルトの名無しさん :2006/10/04(水) 09:14:25
MFCはどうやってるんだっけ?
あれも、CWndの実体をWNDPROCに渡してるよね。

207 名前:デフォルトの名無しさん :2006/10/04(水) 09:18:12
MFCはスレッド毎にHWND<->オブジェクトマップを持ってる。
ATL/WTLはサンク使ってる。

208 名前:デフォルトの名無しさん :2006/10/04(水) 16:30:50
普通のダイアログならCreateDialogParamの最後の引数で
WM_INITDIALOGのlparamにユーザーデータ渡せるので、そこでSetProp。
WM_DESTROYで、RemoveProp。
コモンダイアログなら、構造体メンバのlCustDataから同じく渡すことできる。


209 名前:デフォルトの名無しさん :2006/10/04(水) 16:33:55
それより長い期間でクラスの実体配送を機能させようとすると
WM_NCCREATE/WM_NCDESTROY の組になるね

210 名前:デフォルトの名無しさん :2006/10/04(水) 16:51:01
WM_NCCREATEの前にも何か来てたような

211 名前:209 :2006/10/04(水) 17:01:42
>>210
ぐぐったら見つかった WM_GETMINMAXINFO が前に来るのかー
素で知らなかったよ

212 名前:デフォルトの名無しさん :2006/10/04(水) 20:58:49
Windowsプログラム初心者です。現在C#を使っています。

質問なのですが、現在アクティブになっているWebブラウザから、テキストを
抽出するプログラムを書きたいのですが、その実現方法にはどの様な方法が
あるのでしょうか?
(板違いだったらすいません。)

213 名前:デフォルトの名無しさん :2006/10/04(水) 21:02:42
とりあえずC#スレに行けば

214 名前:デフォルトの名無しさん :2006/10/04(水) 21:08:32
はい
http://www.happy2-island.com/vbs/cafe02/capter00701.shtml

215 名前:デフォルトの名無しさん :2006/10/04(水) 21:16:40
>214
有難う御座います。この方法だと、IEオブジェクトを新規に作成することになってしまうと思うんですが、
既に開いてあるIEをオブジェクトとして扱う(新規に作成せずに)ことは可能なのでしょうか?

216 名前:デフォルトの名無しさん :2006/10/04(水) 21:26:20
GetObject

217 名前:デフォルトの名無しさん :2006/10/04(水) 22:07:24
>>216
有難う御座います。
GetObjectを用いると言うことは、ブラウザにプラグインを組み込んで
利用するといった方法になるでしょうか?
その場合、プラグインがテキスト送信先のプログラムを起動し、テキストを
送信といった流れになるでしょうか?




218 名前:デフォルトの名無しさん :2006/10/04(水) 22:15:00
GetObject GetActiveObject

219 名前:デフォルトの名無しさん :2006/10/04(水) 22:30:28
しょぼい質問ですみません。

現在VC++6.0を使ってAPIプログラミングしています。
エディットコントロール(IDC_EDIT1)に16進数(0-9,A-F)以外
入力を受け付けなくしたいんですが、どのようにやればいいでしょうか。

よろしくお願いします。

220 名前:デフォルトの名無しさん :2006/10/04(水) 23:24:29
サブクラス化でWM_CHARを見て不要なものを殺す

221 名前:デフォルトの名無しさん :2006/10/05(木) 01:31:53
SHLimitInputEdit使えね〜
使えない文字を入力したときにバルーンが出るのはいいが、
「ファイル名には次の文字は使えません」 or 「ファイル名には次の文字のみを使ってください」
ファイル名前提かよ orz
IItemNameLimits::GetValidCharactersしか呼ばれないし、訳判らん。
ES_NUMBER付きエディットコントロールのような動作を期待してたんだけどな。

222 名前:デフォルトの名無しさん :2006/10/05(木) 01:51:39
> It might be altered or unavailable in subsequent versions of Windows.
とか書いてる司法省との和解でいやいや公開系の関数だから仕方ないだろ
ShellAboutなんか強制的に「Microsoft」を頭に付けられるし

223 名前:デフォルトの名無しさん :2006/10/05(木) 11:02:58
だってVS2005のには書いてなかったんだもん(´・ω・`)

224 名前:デフォルトの名無しさん :2006/10/05(木) 11:04:46
いやいやだろうが公開する以上はちゃんとしなきゃ

225 名前:デフォルトの名無しさん :2006/10/05(木) 11:11:51
VisualStudio.NET 2003 + WindowsXP なのですが、
タイトルバーもなにもない、中身だけのウインドウをつくるにはどうすればいいんでしょうか?
dwStyleをどう設定していいもんだかわかりません。

226 名前:デフォルトの名無しさん :2006/10/05(木) 11:26:03
WS_POPUP

227 名前:デフォルトの名無しさん :2006/10/05(木) 12:20:51
>>225
できました!ありがとう!!
MSDNは文章の意味がよくわからないよ〜
がんばるよ〜

228 名前:225,227 :2006/10/05(木) 12:21:28
>>227>>226さん宛でした。ありがとう!>>226!!

229 名前:デフォルトの名無しさん :2006/10/05(木) 12:29:50
意味が分からなかったら試せばいい。

230 名前:デフォルトの名無しさん :2006/10/05(木) 22:26:40
子プロセスが32bitと64bitのどちらで動作するか、起動する前に判定するには
どうしたらいいですか?
GetBinaryTypeは64bit Windows上で/platform:anyな.NETバイナリを32bitと判定
しますが、実際には64bitで動作するようです。
子プロセスを起動した後ならIsWow64Processで判定できるのですが…。

231 名前:デフォルトの名無しさん :2006/10/06(金) 08:25:28
>>189
すいません。質問内容をしくじりました。
>>37のやりかたでUACダイアログがでてます。
しかしながら、ファイルを実行していいかどうかのUACダイアログであって、
許可をしても、そのexeから、Program Filesを上書きできないという質問です。

>>37を読んでイケるとおもったんですが、実際やってみたらUACダイアログでて
許可をしても、Program Filesの内容をいじれないので、
インストール時とかにでてくるような、Program Filesをいじれるようになる
UACダイアログを出すAPIを求めているというわけです。
環境はWindowsVistaRC1です。

232 名前:デフォルトの名無しさん :2006/10/06(金) 14:45:04
ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpfileio/html/_win32_getbinarytype.asp

6ビット…


233 名前:デフォルトの名無しさん :2006/10/06(金) 15:00:40
216ビット版OSにならなかっただけましかと。

234 名前:デフォルトの名無しさん :2006/10/06(金) 15:05:18
情報が6ビット分しか無いことに驚いたのかと


235 名前:デフォルトの名無しさん :2006/10/06(金) 18:36:16
絵の読み込みについて

hoge.bmpがあり

HBITMAP Bmp1, Bmp2;

Bmp1 = (HBITMAP)LoadImage(NULL, hoge.bmp, 〜 ;

とした後に、
Bmp1 の任意の範囲を Bmp2 へ
もしくは、Bmp2 へ hoge.bmp の任意の範囲を Bmp2 へ
読み込ませたいのですが、どうも何を使えば良いのかわかりません。

Bitblt だと HDC が対象になるし
LoadImage だと左上を起点とする範囲しか読めないし
ヒントだけでも良いのでよろしくお願いします。

236 名前:デフォルトの名無しさん :2006/10/06(金) 18:44:04
>>235
CreateCompatibleDC
SelectObject
BitBlt
DeleteDC

237 名前:デフォルトの名無しさん :2006/10/06(金) 18:53:32
>>236
ありがとうございます。
それらをもう一度調べ直します。

238 名前:デフォルトの名無しさん :2006/10/06(金) 19:12:37
>>236
感動した

239 名前:デフォルトの名無しさん :2006/10/06(金) 21:14:05
>>236
(((((っ・ω・)っちゃんと戻さなきゃ駄目!

240 名前:デフォルトの名無しさん :2006/10/06(金) 21:40:28
>>239
いや、必要なAPIを列挙しただけで、手順を説明したわけじゃないからw

241 名前:デフォルトの名無しさん :2006/10/07(土) 00:02:35
>>232
SCS_64BIT_BINARYが書いてないし。
やっぱりmsdn2になる前の日本語版はダメすぎだ

242 名前:デフォルトの名無しさん :2006/10/07(土) 01:14:01
>>231
>>37の方法で出したUACのダイアログから起動したexeで問題なく
Program Filesの更新ができたけど?
WRPで保護されたファイルで試して上書きできないとか思ってないよね?
更新機能を持ったサードパーティー製のアプリで試してみれ。
とりあえずFirefoxはfirefox.exeを>>37の方法経由で起動して
1.5.0.6→1.5.0.7へ問題なく更新できた。

243 名前:デフォルトの名無しさん :2006/10/07(土) 02:00:34
いちおうテストに使ったプログラムも置いとく
ttp://bebe.run.buttobi.net/up/src/be_4576.zip.html
runasでは昇格できないのでコマンドラインから昇格したくて作ったんだけど

244 名前:デフォルトの名無しさん :2006/10/07(土) 09:32:30
窓プログラミングの場合、malloc/newなんかのリーク以外にも
DCの開放ミスの危険性もあるわけですけど、
_CrtDumpMemoryLeaksのようにこれを検出する方法ってありますか?

いまは危険箇所がわかってればループ処理させてメモリ使用量とか見てるんですが大変

245 名前:デフォルトの名無しさん :2006/10/07(土) 09:58:25
>>244
タスクマネージャのGDIオブジェクトでも見ておけ。

246 名前:デフォルトの名無しさん :2006/10/07(土) 10:17:06
>>245
サンクス 単なるメモリ使用量より遥かにわかりやすいです

247 名前:デフォルトの名無しさん :2006/10/07(土) 11:24:30
別アプリケーションのウインドウのある特定の座標の
色を識別したいのですが、これをWIN32APIで実現するには、
どうすればできますか?
そのウインドウにはボタンや画像、テキスト領域が配置してあるとして。
つまり、昔のBASICでいう Color = Point(100, 150) みたいな事がやりたいのです。
これと同様の機能がUWSCというソフトにPeekColorというのがあります。

宜しくお願いします。

248 名前:デフォルトの名無しさん :2006/10/07(土) 11:29:00
GetPixel

249 名前:デフォルトの名無しさん :2006/10/07(土) 11:40:03
>>248
即レス、ありがとうございます!!

250 名前:235 :2006/10/07(土) 12:09:23
すみません、降参します(´・ω・`)


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