2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Win32API質問箱 Build44

1 :デフォルトの名無しさん:2006/06/28(水) 22:38:45
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

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

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

2 :デフォルトの名無しさん:2006/06/28(水) 22:39:49
-過去スレ
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/06/28(水) 22:41:01
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/06/28(水) 22:42:11
- MSDN ホームページ
http://www.microsoft.com/japan/msdn/
- MSDN ライブラリ
http://msdn.microsoft.com/library/ja/
- MSDN 2 ライブラリ
http://msdn2.microsoft.com/ja-jp/library/default.aspx
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Google
http://www.google.com/

- Platform SDK Update
(Windows® 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/

- 書籍
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


5 :デフォルトの名無しさん:2006/06/28(水) 22:43:11
【HSP】HSPで3Dゲーム【3D】
http://pc8.2ch.net/test/read.cgi/gamedev/1016699230/
HSPでRPG
http://pc8.2ch.net/test/read.cgi/gamedev/1082902759/
HSPで出来る範囲について
http://pc8.2ch.net/test/read.cgi/gamedev/1085733089/
HSP - Hot Soup Processor [11]
http://pc8.2ch.net/test/read.cgi/gamedev/1133488968/
HSPでの麻雀プログラムについて
http://pc8.2ch.net/test/read.cgi/gamedev/1047707655/
HSPは・・・
http://pc8.2ch.net/test/read.cgi/gamedev/1104208959/
おまいらHSPで適当なゲームでもつくりませんか
http://pc8.2ch.net/test/read.cgi/gamedev/1102214621/
★ゲーム製作期待の星! HSP Part 9 ★
http://pc8.2ch.net/test/read.cgi/gamedev/1005313791/
HSPで完全オリのSLGを作るスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1047478458/
HSPでSLGが作れるようになるまで頑張るスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1103618349/
HSPでモンスター育成SLGを作りましょう!
http://pc8.2ch.net/test/read.cgi/gamedev/1089467139/
ネットゲームforHSP『無人島』制作スレ
http://pc8.2ch.net/test/read.cgi/gamedev/1018534410/
PGの面接で、使える言語はHSPですって言ったら
http://pc8.2ch.net/test/read.cgi/gamedev/1046921466/
HSPでシミュレーションRPG
http://pc8.2ch.net/test/read.cgi/gamedev/1036923414/

6 :デフォルトの名無しさん:2006/06/28(水) 22:51:20
>>1


7 :デフォルトの名無しさん:2006/06/28(水) 22:59:18
これを付け加えてもよいと思う。

MSDN ライブラリ 2006年6月版
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=373930CB-A3D7-4EA5-B421-DD6818DC7C41

8 :デフォルトの名無しさん:2006/06/28(水) 23:04:48
MessageBox(NULL, ">>1 乙", NULL, MB_OK);

9 :デフォルトの名無しさん:2006/06/29(木) 00:22:25
一物

10 :デフォルトの名無しさん:2006/06/29(木) 04:19:11
>>5は何だよw

11 :デフォルトの名無しさん:2006/06/29(木) 19:27:01
ハードディスクのキャッシュ内容ををハードディスクに書き出したい(シンクロさせたい?)
だけど、APIありますか?


12 :デフォルトの名無しさん:2006/06/29(木) 19:28:54
ハードディスクのキャッシュ内容ををハードディスクに書き出したい(シンクロさせたい?)
だけど、APIありますか?


13 :デフォルトの名無しさん:2006/06/29(木) 19:37:17
ttp://support.microsoft.com/default.aspx?scid=kb;ja;332023

キャッシュされたデータを即座に物理ディスクに書き込むように強制するには、一般に以下の 2 つのコマンドを使用します。

*)flush buffers コマンドは、SCSI および IDE/ATAPI のディスク デバイスで使用できるコマンドであり、
ディスクに対し、キャッシュされたデータをすべて即座にディスクに書き込むように命令します。
SCSI ディスクの場合は、ディスクに SYNCHRONIZE CACHE コマンドを発行することによって実装されています。
IDE/ATAPI ディスクの場合は、ディスクに対して FLUSH CACHE コマンドが送られます。
このコマンドは、通常、Windows のプログラムが FlushFileBuffers API を呼び出した結果として発行されます。
レジストリへの書き込みは、FlushFileBuffers API の呼び出しと
ディスクへの SYNCHRONIZE CACHE コマンドの送信が発生する操作の一例です。



14 :デフォルトの名無しさん:2006/06/29(木) 19:38:48

*)Write Through コマンドは、SCSI ディスク デバイスでのみ使用でき、ForceUnitAccess (FUA) ビットを設定した状態で
ディスクに対して WRITE コマンドを発行することによって実装されています。この種のコマンドは、現在のデータのパケットを、
オンボード書き込みキャッシュを通さずに、即座にディスクに書き込むように命令します。
通常、この動作が発生するのは、Windows プログラムが、FILE_FLAG_WRITE_THROUGH フラグを設定した状態で
CreateFile API を呼び出して開いたファイルに対して、WriteFile API を呼び出して書き込みを行った場合です。
一般にウイルス検索ソフトウェアは、FILE_FLAG_WRITE_THROUGH フラグを設定した状態でファイルを開きます。
FUA ビットのサポートはオプションです。この機能は、一部の SCSI およびファイバ チャネル (FC) デバイス
(一般には RAID アレイではなく個々のドライブ) にのみ実装されています。

仕様により、これらのコマンドは、ディスクに書き込まれているデータの安全性を確保するため、
ある程度のパフォーマンス (一般にはディスクのオンボード書き込みキャッシュによって提供されるもの) を犠牲にします。
これらのコマンドによってデータがディスクに即座に書き込まれず、さらにディスクの電源が突然切れた場合、
キャッシュされたデータは失われます。また、書き込み中のファイルが破損する可能性もあります。


ファイル・アクセスを細かく制御する (API VC++)
ttp://www.geocities.jp/monalipse/c/api/FileAccess.html


15 :デフォルトの名無しさん:2006/06/29(木) 20:17:28
早速のレスどうもです!
参考になりました。
ハードディスク全体のキャッシュの書き出しをしたいので「flush buffers」で目的が達成できそうなんですが、
VCのヘッダー群、Googleで検索してみたんですが、有効な情報が見つけられませんでした。
何か情報ありましたら教えてください。
よろしくお願いします。


16 :デフォルトの名無しさん:2006/06/29(木) 20:25:12

ttp://wisdom.sakura.ne.jp/system/winapi/win32/win113.html

FlushFileBuffers()
BOOL FlushFileBuffers(HANDLE hFile);

ファイルのバッファをフラッシュします

hFile - GENERIC_WRITE アクセスを持つフラッシュするファイルを指定します

戻り値 - 関数が成功すれば 0 以外、失敗すれば 0


17 :デフォルトの名無しさん:2006/06/29(木) 20:25:16
>このコマンドは、通常、Windows のプログラムが FlushFileBuffers API を呼び出した結果として発行されます。

18 :デフォルトの名無しさん:2006/06/29(木) 22:07:31
ttp://uploaderlink.hp.infoseek.co.jp/cgi-bin/512kb/src/up12112.jpg
こいつをどうにかするツール作ってぇん

19 :デフォルトの名無しさん:2006/06/29(木) 22:31:21
自作ポエムを大量に流せ

20 :デフォルトの名無しさん:2006/06/29(木) 23:22:03
フィギュアぶっかけ画像も

21 :デフォルトの名無しさん:2006/06/30(金) 01:58:58
タスクマネージャの「プロセスの終了」はどのような方法をとっているのでしょうか?

TerminateProcessかと思ったのですがDLLの管理について問題があるようです
ExitProcessは引数にプロセスのハンドルが渡せないので自プロセスのみかと思われます

22 :デフォルトの名無しさん:2006/06/30(金) 02:24:07
>>21
タスクマネージャがどう処理しているのかは知らないが、
予め終了させたいプロセスが分かっている(hProcessとする)なら

CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("Kernel32"), "ExitProcess"), 0, 0, NULL);

のように、相手のプロセスに強制的にExitProcessを呼び出させることができるけど。
これでうまくいくかはシラン

23 :15:2006/06/30(金) 11:47:23
レスありがとうございます、
スイマセン説明不足でした。
やりたい事は、自分が作ったファイルのキャッシュの書き出だけではく、
システム駆動中のプロセス全部のキャッシュの書き出しを行いたいのです、
(シッピング?のような)
情報ありましたら、よろしくお願いします

24 :デフォルトの名無しさん :2006/06/30(金) 17:16:03
他の実行ファイル(Notepad)を実行してNotepadに文字列を入力して改行したいの
ですが、どうすればいいでしょうか?
一文字、一文字を入力ならkeybd_eventで入力は出来たのですが文字列で一気に
入力したいのです。理想としては
char MOZI;とかの変数にwscanfなどで入力された文字列を変数に保存(代入?)して
そのあとにNotepadを起動したらその文字列と最後に改行を入力したいのです。
どうかよろしくお願いします。

25 :21:2006/06/30(金) 18:00:18
>>22
うまくいきました. ありがとうございます

26 :デフォルトの名無しさん:2006/06/30(金) 18:50:01
>>25
一応言っておくと、22の方法は9xでは使えないが平気?

27 :デフォルトの名無しさん:2006/06/30(金) 19:06:52
プロセス/スレッド制御は9xとNT系で大きく違いすぎて
互換性を考慮するのが大変になってきたな…

28 :デフォルトの名無しさん:2006/06/30(金) 20:31:59
>>23
そのリンクに「レジストリに書き込めばすべてフラッシュされる」と書いてある

29 :デフォルトの名無しさん:2006/07/01(土) 01:51:03
めちゃくちゃくだらない事で恐縮なんですが…
DWORDってDoubleWORD、ワード長*2 って事で32bitなんですよね?

でも今のCPUってIA32だからワード長は32bitじゃないんですか?

30 :デフォルトの名無しさん:2006/07/01(土) 01:53:30
>>29
そういう慣習になってるだけ。

31 :デフォルトの名無しさん:2006/07/01(土) 01:55:23
>>29
16bitのときからあったデータ型なんじゃないのか?
で、そのままソースの互換を保つために32bitに。と適当に回答。

32 :デフォルトの名無しさん:2006/07/01(土) 02:02:19
あーなるほど……
即レス感謝です。

33 :デフォルトの名無しさん:2006/07/01(土) 02:11:39
自プロセスで生成したメインウィンドウの一覧を取得したいのですが何かよいAPIはあるでしょうか?
EnumWindowsだと他のプロセスのメインウィンドウも取得してしまうので困っています。

34 :デフォルトの名無しさん:2006/07/01(土) 02:13:59
EnumWindowsで取得したウインドウに対してGetWindowThreadProcessIdをかけてプロセスIDを取得し、
それをGetCurrentProcessIdで取得した自プロセスのIDと比較する。
一致していれば自プロセスのウインドウ。

35 :デフォルトの名無しさん:2006/07/01(土) 02:20:41
>>34
素晴らしいです!ありがとうございます!

36 :デフォルトの名無しさん:2006/07/01(土) 07:36:38
>>33
スレッド単位で良ければEnumThreadWindowsがあるんだけどね。

37 :デフォルトの名無しさん:2006/07/01(土) 08:07:33
タスクトレイの件で質問した、前スレ979ですが

>>980
おっしゃるホバー時に文字列を動的に生成される場合には、
正常に取得できないとの事ですが、そういう場合は
諦めるものとして、それ以外のホバー時に動的に生成しない
ものについて、取得する方法はありますか。

>>983
CPU使用率を取るためにこういう事をしたいんじゃなくて、
タスクマネージャのCPU使用率のように、ころころとツールチップの
内容が変わる場合に、その文字列を取得したいという例です。
勿論取得したい文字列は、タスクマネージャのものではありません・・。

38 :デフォルトの名無しさん:2006/07/01(土) 09:22:43
98 までを切り捨てるなら、
Shell_TrayWndから辿っていってToolbarWindow32まで行って、
そいつのToolTip取得して、
そっから文字列取得すればいいだろ。

39 :982:2006/07/01(土) 10:48:40
>>37
だからShell_NotifyIconをフックしろって。
動的だろうがなんだろうが対応できるから。


40 :デフォルトの名無しさん:2006/07/01(土) 13:15:05
これとかどうかな。何やら怪しげなことやってるが・・・
ttp://forums.belution.com/ja/vc/000/271/38.shtml

41 :デフォルトの名無しさん:2006/07/01(土) 15:11:21
ほかのウィンドウよりいつも手前に表示されてるんだけどウィンドウメッセージは
自分の裏のにスルーしたいときってシコシコ自前で中継する方法しかありませんか?

自ウィンドウを表示されてるんだけど存在してないことにしてくれるモードになれるAPIみたいのがほしいです


42 :デフォルトの名無しさん:2006/07/01(土) 15:38:47
日本語でおk

43 :デフォルトの名無しさん:2006/07/01(土) 15:49:21
>>41
多分、キーボードイベント・マウスイベントをフォアグランドウィンドウ以外の
ウィンドウで受け取りたいとの事ではないかと。

その機能を実現するAPIは、AttachThreadInput で実現可能

44 :デフォルトの名無しさん:2006/07/01(土) 16:13:10
>>42
つまり、AAであらわすとこんな感じのやつってことでわ?
                                      //                    |
                                     //     」              |
                                     //     7Γ               |
                                      //_                     |
                                        ||| |                    |
                                        |  |                 /
                      ダンッ                | u |                 /
                           ダンッ            |  \                |
 ちょwwおまww             \    _             |  \              |
           マトリクスー        _―\\ || |   ___      |__  ̄ ̄―______-/
 Λ_Λ   ━−‐‐‐           ) ( ̄ ̄ ̄(Ξ (|| ||       |   _______|__
 (;´∀`)━Λ_Λ‐‐ ━−‐‐‐  ̄―//  ̄ ̄(Ξ  (|| ||  ___|―― _________|_
 (    ) ( ´∀`)ーっ__ ミ     /  ダンッ   (Ξ  (|| ||≪| _―― ̄ ̄              |
 | | | ⊂ニ__  ̄ヽ\                 | ̄― ̄/ ̄  ____―――――――――
 (__)_)     (__)_)               ( ̄(0_/ ̄ ̄ ̄


45 :デフォルトの名無しさん:2006/07/01(土) 19:59:48
エディットボックスに無効な数字(例えば小さすぎる数字)などが
入力されたときに、エラーメッセージをMessageBoxではなく
バルーンを使って表示したいのですが、どうすれば良いでしょうか?
CToolTipCtrl ttc;

ttc.Create(m_hWnd, 0, 0, TTS_BALLOON);
ttc.Activate(TRUE);
ttc.SetTitle(TTI_ERROR, L"エラータイトル");

ttc.AddTool(CToolInfo(TTF_SUBCLASS, GetDlgItem(IDC_EDIT), 0, 0, L"エラーメッセージ"));
こうしてしまうとエディットボックスにカーソルを置かないとエラーメッセージが
表示されないし、IDC_EDITに元からある説明のためのバルーンに重なって表示されてしまいます。

46 :デフォルトの名無しさん:2006/07/01(土) 20:31:30
できました〜みなさ〜ん!!
まだ課題が山積みですが、一応SDKレベルでActiveXコントロールを初期化する方法がわかりました。

WBC001.LZH:SDKレベルでWebBrowserコントロールを使用して簡易ブラウザを作るサンプル(C++)
ttp://winscript.s41.xrea.com/upload/source/No_0015.lzh

あの後、CoCreateInstance()じゃなくてOleCreate()を使うのだ、という事に気付いたのだけれどその後がわからなくて、OleCreateでググったらズバリな記事がCode Projectにありました。ありがとうCode Project!

ttp://www.codeproject.com/com/cwebpage.asp?df=100&forumid=13828&exp=0&select=1119074

しかし、MSにはまたやられた・・・

SDK文書にはDoVerbすると書いてある個所があるのは分かってた。
で、DoVerbのリファレンス見たらEnumVerbしたものをパラメータに入れるって書いてある。
のでIEnumVerb::Next()してみたら一つも列挙できないのでこれじゃDoVerbなんか出来ないな、と思ってたら実はEnumVerbしなくてもDoVerbはできるのだった・・・
それは上のCode Projectの記事でVerb列挙できないWebBrowserコントロールにDoVerbしているのを見てわかったのだった・・・

・・・MSDN・・・なぜこんなにもオレを酷い目に遭わせる・・・OrZ

なお、現在ひっかかっているのはタブストップです。コントロール内の各コントロール(ボタンとかエディットとか)やリンクをTABキーで巡回できません。

そもそも私はTABキーで移動する正式なやり方を知らなくて、
いつもはメインループ部でWM_KEYDOWN/VK_TABが来たら次の子ウィンドウにSetFocusする、という方法をやってます。(バカなのかも)

たぶんみなさんならTABキーで移動できる方法が想像つくんじゃないでしょうか?

で、何はともあれ、これでどんなコンパイラでもWebBrowserコントロールが使えます!

BCCでもgccでもWin32対応なら何でもです!(NASMとかもありかも) MSに頼る必要はもうありません!

うーん・・・ブラウザ百出の予感・・・
長文失礼しました。m(_ _)m

47 :デフォルトの名無しさん:2006/07/01(土) 21:18:27
>>46
Sub1〜Sub8っていう関数名どうにかしろよ。

48 :デフォルトの名無しさん:2006/07/01(土) 21:22:47
>>46
コンストラクタでAddRef呼んで、デストラクタでRelease呼ぶのもおかしいだろ。

49 :デフォルトの名無しさん:2006/07/01(土) 22:47:05
>>46
色々ワロタ

50 :デフォルトの名無しさん:2006/07/01(土) 23:59:45
>>46
よくわからんが↓と同じ方法か?
http://www.adp-gmbh.ch/win/misc/mshtml/HTMLWindow.html
見た瞬間、泣きながら「ATL使おう」とか思ったけど、同じことを調べてやったてんなら神だな。

mingwってATLだけ対応してないってことなんだ。Oleは対応してんだね。
漏れも今WebBrowserコントロールをATLで使ってるが、gccが使えるのはいいな。
とにかく、Sub1〜Sub8っていう関数名どうにかしろよ。

51 :50:2006/07/02(日) 00:07:35
あっ、タブストップはあれじゃないか?
ウィンドウスタイルのWS_TABSTOP指定してないんじゃないか?

52 :デフォルトの名無しさん:2006/07/02(日) 01:14:05
>>41

LayeredWindow

53 :デフォルトの名無しさん:2006/07/02(日) 01:26:11
>>41

http://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.asp

ウィンドウスタイルに TOPMOST と Transparent を同時に指定してみて下さい



54 :デフォルトの名無しさん:2006/07/02(日) 07:49:08
すでに起動されてるプロセスの実行ファイル名がわかってるときに(仮にtest.exeとする)
そのプロセスハンドルを取得するにはどうすればいいのでしょうか?

55 :デフォルトの名無しさん:2006/07/02(日) 07:52:35
Process クラス調べろ

56 :デフォルトの名無しさん:2006/07/02(日) 10:22:58
HDC・・・・・・・・画像を描く板
HBITMAP・・・・画像のデータ情報

HBITMAPの形式
・DIB・・・・・多様性が高い情報形式
・DDB・・・・マイナーな情報形式

上の認識でOK?


CreateCompatibleDCでDCを55個作りまくったんだんだが、たった55kアップ。
メモリがあまり変化してない、画像データってもっとメモリ食うと思ってたよ。


57 :デフォルトの名無しさん:2006/07/02(日) 10:25:09
( ゚д゚)ポカーン

58 :デフォルトの名無しさん:2006/07/02(日) 10:33:23
ツールバーを作ったのですが、bitmapによってエラーをはくと思ったら、trueカラーがだめなようです。
ソフトで対応しているものは多いのに、なぜだめなのでしょうか?MSDNで調べてみましたが、見つかりませんでした。
それとも別の方法で実現しているのでしょうか?ほかに原因と思われるものはないのですが・・
よろしくお願いします。

59 :デフォルトの名無しさん:2006/07/02(日) 11:12:31
>>56
HDCはデバイスコンテキストへのハンドル
デバイスコンテキストというのは抽象的なもので
描画先はウインドウだったり、プリンタだったりする。
これによって、描画先が何であろうと、プログラマが気にしなくてすむ。

DIBとDDBは簡潔に説明するのが、自分には無理なのでパス
CreateCompatibleDCで作ったデバイスコンテキストには、
1x1モノクロのビットマップが割り当てられている。
もしこのDCに描画したかったら、自分でビットマップを確保して
SelectObject()すること。

60 :デフォルトの名無しさん:2006/07/02(日) 12:22:26
>>54
プロセスを列挙して一個ずつ条件にあうかどうか調べる。

61 :デフォルトの名無しさん:2006/07/02(日) 12:22:46

画像の表示までは出来た・・・・
透明も・・・しかし半透明ができない!w
やっぱ一個一個計算していくしかないのね・・・うはすふあhふdsyひゅは オワタ

62 :デフォルトの名無しさん:2006/07/02(日) 13:07:54
>>56
HDC…画家
HBITMAP…紙

DIB…デバイスに依存しない統一された形式
DDB…デバイスによってフォーマットが異なる

63 :デフォルトの名無しさん:2006/07/02(日) 13:11:36
>>56
俺は、HDCが画像を書く板という認識でもよいと思う。

ただ、CreateCompatibleDCで作ったデバイスコンテキスト(板)は、
その上に紙(ビットマップ)を置いて、その紙に画を描くんだという感じ。
(紙を置くとは、HBITMAPをSelectObjectで選択するということ)

初期状態では、1×1モノクロと言うどうしようもないほど小さな紙が置いてある。
紙がない状態が存在すると面倒だから、とりあえず置いてあります程度に考えておけばいい。

結構無理がある言い方だけど、これは連想ゲームの限界。

また、DDBはマイナーでもなんでもない。ただ内部でのみ使われるので外に現れないというだけ。
HBITMAPはDDB。DIBのHBITMAPは存在しないと思え。(ハイブリッドなDIBセクションというのもあるが)

64 :デフォルトの名無しさん:2006/07/02(日) 15:51:48
-- ビルド開始: プロジェクト: 01, 構成: Debug Win32 ------
リンクしています...
WinMain.obj : error LNK2019: 未解決の外部シンボル "public: static struct tagBITMAPINFO * CSpriteAlpha::lpDibBitInfo" (?lpDibBitInfo@CSpriteAlpha@@2PAUtagBITMAPINFO@@A) が
関数 "public: _thiscall CSpriteAlpha::~CSpriteAlpha(void)" (??1CSpriteAlpha@@QAE@XZ) で参照されました。

WinMain.obj : error LNK2019: 未解決の外部シンボル "public: static struct HBITMAP__ * CSpriteAlpha::hDib" (?hDib@CSpriteAlpha@@2PAUHBITMAP__@@A) が
関数 "public: __thiscall CSpriteAlpha::~CSpriteAlpha(void)" (??1CSpriteAlpha@@QAE@XZ) で参照されました。

WinMain.obj : error LNK2019: 未解決の外部シンボル "public: static struct HDC__ * CSpriteAlpha::hDC" (?hDC@CSpriteAlpha@@2PAUHDC__@@A) が
関数 "public: __thiscall CSpriteAlpha::~CSpriteAlpha(void)" (??1CSpriteAlpha@@QAE@XZ) で参照されました。

D:\c\works\takuhai\Debug\01.exe : fatal error LNK1120: 外部参照 3 が未解決です。
ビルドログは "file://d:\c\works\takuhai\01\Debug\BuildLog.htm" に保存されました。
01 - エラー 4、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========




65 :デフォルトの名無しさん:2006/07/02(日) 16:18:26
      r;ァ'N;:::::::::::::,ィ/      >::::::::::ヽ
.      〃  ヽル1'´        ∠:::::::::::::::::i
       i′  ___, - ,. = -一   ̄l:::::::::::::::l
.      ! , -==、´r'          l::::::/,ニ.ヽ
      l        _,, -‐''二ゝ  l::::l f゙ヽ |、 ここはお前の日記帳じゃねえんだ
        レー-- 、ヽヾニ-ァ,ニ;=、_   !:::l ) } ト
       ヾ¨'7"ry、`   ー゙='ニ,,,`    }::ヽ(ノ  チラシの裏にでも書いてろ
:ーゝヽ、     !´ " ̄ 'l,;;;;,,,.、       ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{   __)`ニゝ、  ,,iリ::::::::ミ
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ ,  な!
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /



66 :デフォルトの名無しさん:2006/07/02(日) 19:14:53
HDC…カンバス
HBITMAP…紙
ペンやブラシ・・・画材
LineTo 等の関数・・・画家

67 :デフォルトの名無しさん:2006/07/02(日) 19:45:11

LoadImageやBitBltで画像の表示&色抜きは出来たけど、
半透明&回転が出来ない、どうやらDDBでは無理らしい。
なのでDIB(直接アクセス?)でやらんといけないとか・・
表示はStretchDIBitsでやるのかBitBltは!?

あ〜  もうダメポ・・・・・orz
DirectXの方が簡単に思えてきた。



68 :デフォルトの名無しさん:2006/07/02(日) 19:53:27
その手のサイトを読み込んで出直して来い
ここはお前の(ry

69 :デフォルトの名無しさん:2006/07/02(日) 20:07:02
>>67
ライブラリ組んでしまえばDirect3D使った方が楽な上に早い

70 :デフォルトの名無しさん:2006/07/02(日) 20:07:39

ちらし

DIBSectionを使えばいいことが発見!!
DDBは回転&透明でない、DIBは使いづらいなどの欠点を解決した!?
いいとこどりのDIBSection!!!
DIBSectionは速度どうだろう、測定してみるか。


71 :デフォルトの名無しさん:2006/07/02(日) 20:09:48
>69
DirectX使えない人のためにGDIの方がいいと思って。
DirectX使えない人はいまだに見かけるorz
やっぱ切り捨てたほうがよさげ!?


72 :デフォルトの名無しさん:2006/07/02(日) 20:12:13
AlphaBlendってなかったっけ?

73 :デフォルトの名無しさん:2006/07/02(日) 20:12:57
ピクセル単位で処理すればなんでもできるだろ
とりあえず「今日は〜ができました」とか言ったことはチラシの裏に書いとけ
ここは質問箱

74 :AlphaBlend:2006/07/02(日) 20:21:40
AlphaBlendはWin98で動かないらしいので諦めました
ちなみに、我輩はXPです。


75 :デフォルトの名無しさん:2006/07/02(日) 20:34:42
>>67
cos -sin
sin cos

76 :デフォルトの名無しさん:2006/07/02(日) 20:38:16
>75
thx
無事成功すると思います。

77 :デフォルトの名無しさん:2006/07/02(日) 21:29:45
DIBSection遅いーーー!!!!

640*480 十回表示。
DDB     30fps      CPU 8%
DIBSection 3fps       CPU100%

使えない・・・・orz


78 :デフォルトの名無しさん:2006/07/02(日) 21:30:20
>>77
で、質問は何?

79 :デフォルトの名無しさん:2006/07/02(日) 21:56:03
>78
じゃ、質問
早い回転&透明が出来る方法教えて。


80 :デフォルトの名無しさん:2006/07/02(日) 22:02:28
もういいよ。うせろ

81 :デフォルトの名無しさん:2006/07/02(日) 22:07:41
>80
質問聞いといて、答えられないw


82 :80:2006/07/02(日) 22:16:02
俺は>>78じゃないけど
そうだな。少なくとも俺はレベルがとても低いので答えられそうにない
よってゲーム製作板に行く事をオススメする

83 :デフォルトの名無しさん:2006/07/02(日) 22:18:18
すいません質問させてください。

煩雑にファイルの出し入れや書き換えをしているフォルダが複数あるのですが、
それらのファイルの状況を監視したいと思っているのですが、
数が多すぎて通常のファイルアクセスでは遅くなってしまいます。

そこで、OSがファイル書き込みした時やファイル書き換えをする時などに、フックを仕掛けられないかと思っているのですが、
そのような方法をご存知の方がいましたらご教授ください。

84 :デフォルトの名無しさん:2006/07/02(日) 22:25:10
初心者質問ですいません。

c言語のソースをコンパイルしたいのですがどうするのか・・・。
コマンドプロンプトでしたいのですが

85 :83:2006/07/02(日) 22:29:52
すいません。

しばらく検索をしていたら、目的のことができそうなトピックを見つけました。
拡張シェルオブジェクトのICopyHookインターフェイスで出来そうです。
http://www.asahi-net.or.jp/~GV4J-SGUR/narik/stp002b.htm#ICopyHook

これでなんとか挑戦してみます。ありがとうございました。

86 :デフォルトの名無しさん:2006/07/02(日) 22:58:56
FindFirstChangeNotificationかなんかで出来た気もするが、たぶん見てないだろうな

87 :デフォルトの名無しさん:2006/07/02(日) 23:16:11
>>84
nmake

88 :デフォルトの名無しさん:2006/07/02(日) 23:31:32
>>84
a.cをコンパイルするとしたら、
VCならコマンドプロンプトから cl.exe a.c
mingwならコマンドプロンプトから g++.exe a.c
BCCならコマンドプロンプトから bcc32.exe a.c

コマンドラインの引数が知りたかったら cl /? とか g++ -h とかbcc32は知らん。とかすればいい。

89 :45:2006/07/02(日) 23:39:30
こっちも誰かいいアイデアお願いします・・

90 :83:2006/07/02(日) 23:41:13
>>86
レスありがとうございます。

知りませんでした。情報ありがとうございます。m(_ _)m
ただWaitForSingleObjectがブロック関数なので、同時に監視したいフォルダの数だけスレッドを作らないといけないみたいですね。
ICopyHookインターフェイスと異なりNTFSだけというわけではなく
Win95,NT3.1以降対象なので、FAT32でも問題なく動きそうなのでこちらで検討してみます。

91 :デフォルトの名無しさん:2006/07/02(日) 23:45:03
>>90
少しは勉強しろよ。
WaitForSingleObject()が見つかれば、すぐそばにWaitForMultipleObjects()があるだろ。

92 :83:2006/07/02(日) 23:56:50
>>91
レスありがとうございます。

気づきませんでした。まだプログラムの感覚が鈍いと反省してます・・・・
監視自体が内部的には別スレッド動いているみたいですね。


93 :デフォルトの名無しさん:2006/07/03(月) 00:09:08
>プログラムの感覚が鈍い
┐(´-`)┌

94 :デフォルトの名無しさん:2006/07/03(月) 00:31:37
MessageBox APIの第二引数の型はLPCSTRですが、
ここにint型を指定したいんですがどうすればよいでしょうか?

MessageBox(0,i,NULL,MB_OK);
みたいにやりたいんですが

95 :デフォルトの名無しさん:2006/07/03(月) 00:34:06
>>94
itoa

96 :デフォルトの名無しさん:2006/07/03(月) 00:41:44
>>94
無理。itoaとかsprintfとかで文字列に変換してからに指定しる。

97 :デフォルトの名無しさん:2006/07/03(月) 00:48:24
>77
これって俺のプログラムミス?
異常だよな、、、サイト探してるとDIBSection普通に使っているし。


98 :94:2006/07/03(月) 01:23:21
>>95さん
>>96さん
どうもありがとうございます

char buff[100];
int i = 3;
sprintf(buff, "%d", i);
MessageBox(0,buff,0,MB_OK);

でいけました

99 :デフォルトの名無しさん:2006/07/03(月) 04:56:55
> Win95,NT3.1以降対象なので
ICopyHookがNT3.1にあるとでも思ってるのか?
http://windowssdk.msdn.microsoft.com/en-us/library/ms646539.aspx
> Minimum DLL Version: shell32.dll version 4.0 or later
> Minimum operating systems: Windows NT 4.0, Windows 95
自分が確認もできない環境に妄想だけで対応した気になるのやめろ

100 :デフォルトの名無しさん:2006/07/03(月) 07:37:37
>>99
おまえ恥ずかしいなww

101 :デフォルトの名無しさん:2006/07/03(月) 09:47:59
>>99
ぷぎゃーw

102 :デフォルトの名無しさん:2006/07/03(月) 09:49:21
表示されている画面の色だけを変更したいのですが。

例えば赤い丸の図形があってこれを青色にしたいとき。
こういう場合は、再描画(丸をいったん消して、ペンの色を変えて円を書き直す。)
するしかないのでしょうか。


103 :デフォルトの名無しさん:2006/07/03(月) 12:16:06
いや

104 :デフォルトの名無しさん:2006/07/03(月) 13:24:24
あるフォルダ内にあるファイル一覧を元に動的にポップアップメニューを作成する場合、
どういう方法をとるのが楽ですか?

普通にCreateMenu、AppendMenuをして map<UINT, string>型のグローバル変数に
IDとファイル名を保存しておいて、WndProcでどのメニューアイテムが
クリックされたか取得というのを考えたのですが、どうでしょうか。

105 :デフォルトの名無しさん:2006/07/03(月) 13:32:55
ID_BASE + n とか

106 :デフォルトの名無しさん:2006/07/03(月) 14:21:57
だれか、Win32 API の FindFirstFile()や FindNextFile()を使って、
指定されたフォルダの中のファイルを全て削除するプログラム作ってけろ。
サブフォルダがある場合は再帰的に。
よろぴく。


107 :デフォルトの名無しさん:2006/07/03(月) 14:22:57
1万円で作ってやる

108 :デフォルトの名無しさん:2006/07/03(月) 14:42:01
FindWindow APIの第二引数はドキュメントによれば
「NULL で終わる文字列へのポインタを指定します」
とありますが、
FindWindow(NULL,"aaaaa");
とすると、aaaaaというタイトルのウィンドウがあればちゃんとハンドルが帰ってきます。

例えばchar a[] = "aaaa";
とすればa[]には実際にはaaaa\0が格納されますが、
LPCTSTR型に関しても同じ作用があるのでしょうか?

あ、LPCTSTR型ってchar *の別名でしたっけ?

109 :デフォルトの名無しさん:2006/07/03(月) 14:49:20
>>108
Win32APIというよりC/C++の問題。
"aaaaa"のような文字列リテラルは、ヌル文字終端の文字の配列。

LPCTSTRはconst TCHAR *のtypedef。
そう思いたいのなら、const char *のtypedefだと思えばいい。

110 :デフォルトの名無しさん:2006/07/03(月) 15:06:16
リストビューで、Drag&Dropを受け付けようと、DragAcceptFilesを実行してみたのですが、
WM_DROPFILESのメッセージが来ません。ぐぐってみた所、
リッチエディットコントロールだと、EN_DROPFILESというのがあるようなのですが、
リストビューの場合は、Drag&Dropを受け取る手段が無いのでしょうか?

111 :108:2006/07/03(月) 15:07:33
>>109
はやっ
全然知りませんでした。ありがとうございます

TCHARを調べてみると

For Unicode platforms, TCHAR is defined as synonymous with the WCHAR type.

とありました
#define _UNICODE
すれば wcharになるんですね

112 :デフォルトの名無しさん:2006/07/03(月) 15:31:47
Drag&Dropは受けれる

113 :デフォルトの名無しさん:2006/07/03(月) 17:56:33
>>106
作ったよ

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2239.c

一応 fool proof にしてあるつもりだが
くれぐれも気を付けて使ってくれ



114 :デフォルトの名無しさん:2006/07/03(月) 19:22:12
アプリを再起動させていんだけど。。。
自作アプリを一旦終了し、また再起動(パソコンの再起動じゃないよ、自作アプリの再起動)させてたい。
こんな事したいんですけど、気の利いたAPIありますか?
それとも、別のプロセスで見張ってないとですか?
知ってたら教えてください。


115 :デフォルトの名無しさん:2006/07/03(月) 19:24:24
質問があります。

Tera Termからコマンド入力するプログラムがあるのですが、コマンドを毎回入力するのは
面倒ということで簡単なリモコンぽいモノをVCで作ることになりました。

Tera Termからのコマンド入力という考え方はそのままで、VCのボタンなりを押下することで
Tera Termのコンソール部にメッセージを送りたいと思っています。
(例えば、STARTボタンを押下するとコンソール部にstartと表示される)

FindWindowでTera Termのウインドウハンドルを取得して、SendMessageでメッセージを送ろうとしたのですが、
Tera Termのハンドルの取得がうまくないのか、コンソール部ではなく、タイトル部に対してメッセージを送ってしまい
タイトル名が変更されるという結果になってしまいました。

何か処理が足りないのでしょうか?それとも他の方法があるのでしょうか?
ご教授のほど、お願いします。

116 :デフォルトの名無しさん:2006/07/03(月) 19:32:54
>>114
自exeを起動して、自プロセスを終了させるだけじゃん。

117 :デフォルトの名無しさん:2006/07/03(月) 19:38:21
>>115
spy++でどういうウィンドウ構成になっているか調べろ。

118 :デフォルトの名無しさん:2006/07/03(月) 19:40:38
Tera Termのソースなら持ってるよ

119 :デフォルトの名無しさん:2006/07/03(月) 19:43:34
Tera Termのヘルプをよく読もう

120 :デフォルトの名無しさん:2006/07/03(月) 20:15:00
http://vipper.jpn.org/www/upload/src/VIPphoto5924.jpg
ToolTipに影をつけるには何が必要ですか?

121 :デフォルトの名無しさん:2006/07/03(月) 20:29:06
レジストリ

122 :115:2006/07/03(月) 20:37:50
>>117-119
早速のレスありがとうございます。
解決しましたと言いたいところですが、明日改めて確認してみます。
会社ではネットを見る権限がないので・・・

spy++とTera Termのヘルプですか。
spy++は確認したつもりですが、理解不足だったみたいですね。
ヘルプはTera Term側が原因と思わず、見向きもしてませんでした。

123 :デフォルトの名無しさん:2006/07/03(月) 21:04:23
>>
SH〜〜のAPIにそういう関数があったと思う。SHRemoveDirectoryだっけか、よく覚えてないが

124 :デフォルトの名無しさん:2006/07/03(月) 21:21:15
>>123
DeleteFileより、
> To recursively delete the files in a directory, use the
> SHFileOperation function.
ということのようです。

125 :デフォルトの名無しさん:2006/07/03(月) 21:32:11
>>112
どうやって受け取るのでしょうか。WM_DROPFILESのメッセージも来ないようですし、
WM_COMMANDやWM_NOTIFYをチェックしてもそれらしいメッセージが見当たりません。

126 :デフォルトの名無しさん:2006/07/03(月) 21:46:49
>>125
ぐぐってると、コモンコントロールへのドロップは、
サブクラス化しないと受け取れないという事が書いてありましたので、
試してみたらいけました。お騒がせしました。

127 :デフォルトの名無しさん:2006/07/03(月) 21:50:08
>>114
多重起動防止のロジックを応用して、
起動時に多重起動だったら
古いプロセスを殺すようにしておいて
再起動したいときはargv[0]を
CreateProcess()する。

という手はよく使う。

128 :120:2006/07/03(月) 22:27:32
CS_DROPSHADOWなんてのがありました

129 :デフォルトの名無しさん:2006/07/03(月) 22:34:42
>>115
マクロ使えよ

130 :デフォルトの名無しさん:2006/07/03(月) 22:42:31
座標からウィンドウハンドル取得できなかったっけ


131 :デフォルトの名無しさん:2006/07/03(月) 22:43:29
>>130
出来るよ

132 :デフォルトの名無しさん:2006/07/03(月) 22:45:00
WindowFromPoint

133 :デフォルトの名無しさん:2006/07/04(火) 01:12:43
>113
大変ありがとうございました。
さっそく、明日、会社で、参考にさせていただきます。


134 :デフォルトの名無しさん:2006/07/04(火) 01:29:03
>>131
>>132
ありがと。思い出した
ぱすみえみたいなツール作る時に使ったんだった

135 :デフォルトの名無しさん:2006/07/04(火) 03:10:48
Windows起動や終了時、ログオン、ログオフの時に飛んでくるメッセージは何になるのでしょうか?

136 :デフォルトの名無しさん:2006/07/04(火) 03:22:16 ?#
いや別に飛んできたメッセージが何か別のものになることはないから。

137 :デフォルトの名無しさん:2006/07/04(火) 03:23:40
GetProcessHeap()って同一プロセスなら常に同じハンドルが返ってくる?
void *buf = HeapAlloc( GetProcessHeap(), 0, size );
if ( buf == NULL ) return 1;
HeapFree( GetProcessHeap(), 0, buf );
みたいなのは安全?

138 :デフォルトの名無しさん:2006/07/04(火) 03:26:35
>>137
安全

139 :デフォルトの名無しさん:2006/07/04(火) 03:28:35
>>136
起動時や終了時、ログオン、ログオフ時に何か処理をしたいと思っているのですが
どんなメッセージを捕まえればよいのかさっぱりで途方にくれています。
何かヒントをいただけませんでしょうか?

140 :デフォルトの名無しさん:2006/07/04(火) 03:32:11
起動時やログオン時には何もこないよ。
アプリも動いてないし。

ログオフ時、終了時には WM_QUERYENDSESSION とか
WM_ENDSESSION とか来ますよ。

141 :デフォルトの名無しさん:2006/07/04(火) 03:38:21
>>140
その二つのメッセージがあれば目的を達成できそうです。
回答ありがとうございますた。


142 :デフォルトの名無しさん:2006/07/04(火) 03:41:38
>>140
続けてお尋ねしたいのですが
ログオフ時と終了時の区別、スタンバイと休止の区別をつけることは出来ますでしょうか?

143 :デフォルトの名無しさん:2006/07/04(火) 03:50:38
>>138
安全なのね、よかった。
ありがとう。

144 :デフォルトの名無しさん:2006/07/04(火) 03:54:38
>>142
スタンバイ等のときにはWM_POWERBROADCASTも来ますので、
それでなんとかならないでしょうか。

145 :デフォルトの名無しさん:2006/07/04(火) 04:03:39
>>144
回答ありがとうございます。
それが私の環境ですと休止、スタンバイとWM_POWERBROADCASTが送られてきて
スタンバイと休止の区別が付きませんでした。
環境はWindowsXPsp2です。

それにしてもXPのグループポリシーでは起動・終了・ログオフ・ログオンを区別出来てるようなのに
それに対するメッセージがないのはなんでだろう。

146 :デフォルトの名無しさん:2006/07/04(火) 04:11:57
>>145
WM_POWERBROADCASTが飛んできたらwParamを見て、
PBT_APMQUERYSTANDBYになっていたらスタンバイ
PBT_APMQUERYSUSPENDになっていたら休止状態
じゃなかったっけ?

147 :デフォルトの名無しさん:2006/07/04(火) 04:15:50
>>146
私もそう思っていたのですが検証してみると
PBT_APMQUERYSUSPENDのみ飛んできて
STANDBYと名の付くメッセージは飛んできませんでした。

何かおかしいのかな?

148 :デフォルトの名無しさん:2006/07/04(火) 04:20:59
>>143
根拠が不明だから本当に安全かどうか分からん
単に「今まで動いてた」ってだけかもしれないし
>>147
PBT_APMQUERYSTANDBYは廃止されたっぽい。
ヘッダには残ってるけどMSDNからは説明が消えてる

149 :デフォルトの名無しさん:2006/07/04(火) 04:22:58
>>148
HeapAlloc/HeapFreeの引数にGetProcessHeapを使うイディオムは
MSDN内のサンプルコードの所々に使われてるよ。

150 :デフォルトの名無しさん:2006/07/04(火) 05:16:51
>>149
あーすまん、>>137のコード読み違えてた
これなら確かに安全なはずだな

151 :デフォルトの名無しさん:2006/07/04(火) 07:27:36
>>143
でも俺はGetProcessHeapを呼び出すオーバーヘッドが気になって、
結局グローバル変数にコピーする派。

152 :デフォルトの名無しさん:2006/07/04(火) 11:53:36
>>147
以前に誰かのサイトで、
サンザ探したけどその情報の取得の仕方はわからず、
NT系列のOSではレジストリのどっかに書かれてるので結局それを参照した
とかいうことが書かれていますた・・・

153 :デフォルトの名無しさん:2006/07/04(火) 16:04:17
特定のプロセス(のウインドウ)だけを、一時的に最小化・元に戻す事を出来なくしたいのですが
どうすれば良いでしょうか。グローバルフックしてメッセージを破棄すれば良さそうなのは
分かるのですが、そうすると全てのウインドウに対して行われてしまいますので^^;

154 :デフォルトの名無しさん:2006/07/04(火) 16:05:30
エクスプローラのタイトルバーみたくウィンドウのサイズを変更したら
ピクセルの色をグラデーションみたいに表示したいんだけど
いい方法あったら教えてほしいんだ。

本にGetPixelとSetPixel関数は使わないほうがいいって書いてて、
実際それでコーディングしてみたらウィンドウサイズ変更のたびに重くて使えない。

155 :デフォルトの名無しさん:2006/07/04(火) 16:07:20
>>154
GradientFill とか。

156 :153:2006/07/04(火) 16:09:21
すいません自己解決しました。

157 :デフォルトの名無しさん:2006/07/04(火) 16:25:10
>>153
グローバルフックして、その特定のプロセス(のウインドウ)だけ処理すればいいじゃない。

158 :デフォルトの名無しさん:2006/07/04(火) 16:42:57
>>155
ありがとう。
今調べてるんだけどGradientFill関数のサンプルコードがなかなか見つからない・・・
なんか知らない構造体が引数になっててとまどってる

159 :デフォルトの名無しさん:2006/07/04(火) 17:12:30
GradientFillのDelphiの 例

ttp://blog.livedoor.jp/junki560/archives/18495762.html

160 :デフォルトの名無しさん:2006/07/04(火) 17:26:46
最近の奴はMSDN見ずにサンプルを参考に書くのか?
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_8oa4.asp

161 :デフォルトの名無しさん:2006/07/04(火) 18:03:13
>>153
システムメニューから削っちゃえば?
元にもどせるかどうか知らんけど。

162 :デフォルトの名無しさん:2006/07/04(火) 22:17:01 ?
質問です。

オーバーラップI/O で、WriteFile の引数に送りたいデータのポインタを
渡した後、そのデータをすぐに書き換えてしまうのは危険でしょうか?

それとも、内部でコピーを取ってくれているものなんでしょうか?

163 :デフォルトの名無しさん:2006/07/04(火) 22:42:03
ttp://www.microsoft.com/japan/developer/library/jpwinpf/_win32_writefile.htm

出力バッファを使って書き込み操作を行っている間にそのバッファにアクセスすると、
そのバッファを使って書き込んだデータが壊れることがあります。書き込み操作が完了するまでは、
アプリケーションは出力バッファの読み取り、書き込み、再割り当て、解放を行ってはなりません。

164 :デフォルトの名無しさん:2006/07/04(火) 22:43:37
そもそもオーバーラップI/Oは内部でコピーを取る無駄を省くために
存在しているわけで

165 :デフォルトの名無しさん:2006/07/04(火) 22:44:36 ?
ありがとうございます。というか、普通に書かれてましたね。すいませんでした。

166 :デフォルトの名無しさん:2006/07/05(水) 11:18:23
ActiveDirectory環境でクライアントが認証を行ったサーバ名を取得したいのだけど
どの関数を使うのがいいのかな?
NetGetDCNameじゃ、PDCしか取ってこなさそうだし・・・・

これ使うと幸せになれるよってのがありましたら教えてください。


167 :デフォルトの名無しさん:2006/07/05(水) 11:49:11
test

168 :デフォルトの名無しさん:2006/07/05(水) 12:14:20
すんません、すれ違い覚悟で質問なんすが、
自分の作ったアプリを一般に公開されたWin Vistaのパブリックベータ版(日本語版 build 5384)で動くか試してみたんです、
殆どは動作したんですが、一部自作のCOMコンポーネントを使ってるアプリが動作せず、調べてみるとコンポーネントの登録に失敗しているようで、
試しに該当COMのDLLを「regserv32 自作コンポーネント.dll」とすると、エラーしてしまい
ダイアログで「このアプリケーションのサイドバイサイド構成が正しくないため・・・・」と出力されてしまいました。
Dependency Walkerで欠損ファイルが無い事は確認してるんですが、
Manifestとかそういう問題なんでしょうか、何か情報ありましたらよろしくお願いします。


169 :デフォルトの名無しさん:2006/07/05(水) 12:30:04
>>168
スレ違いもいいとこだ…

同じように困ってる人がいるという情報まで
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=518620&SiteID=1

170 :デフォルトの名無しさん:2006/07/05(水) 15:40:57
>>168
欠落エクスポート(利用しているシンボルが無い)とかも無いですか?

171 :デフォルトの名無しさん:2006/07/06(木) 12:47:10
FindFirstChangeNotificationでフォルダ内のファイルの変更を監視できますが、変更を行ったアプリケーションがどれか調べる方法ってありますか?

172 :デフォルトの名無しさん:2006/07/06(木) 12:51:01
ReadDirectoryChangesW

173 :172:2006/07/06(木) 12:51:54
すまん、なんでもない。早漏した。

174 :デフォルトの名無しさん:2006/07/06(木) 13:05:30
どなたか::SetWindowLongPtr関数に GWLP_USERDATA を指定して
設定したデータが64ビット環境において
内部で64ビットデータとして扱われているかどうか
確認された方はいますか?
MSDNで32ビットデータと書かれている為、ここにポインタを代入する
コードを書くのが不安になっています。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_Win32_SetWindowLongPtr.asp

もっとも英語版MSDNにそのような記述は無いので
単に日本語版が古いだけかもしれませんが・・
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windowclasses/windowclassreference/windowclassfunctions/setwindowlongptr.asp

175 :デフォルトの名無しさん:2006/07/06(木) 15:38:37
>>174
UserData目的ならSetPropのほうがいいと思われ
SetPropならHANDLEなんで元からポインタだし

176 :デフォルトの名無しさん:2006/07/06(木) 17:30:00
どのみちコンパイラに指示しなきゃ32bitなのでは?

177 :デフォルトの名無しさん:2006/07/06(木) 21:13:41
RegisterHotKeyで登録したホットキーを押すと
該当スレッドにWM_HOTKEYが飛びますが、

そのとき現在フォアグラウンドのウインドウに、
ホットキーを押した情報が伝わるようにするには、
どうしたらいいでしょうか。

該当スレッドのWM_HOTKEY処理内でkeybd_eventを発行してみましたが、
上手く行きません。

178 :デフォルトの名無しさん:2006/07/06(木) 22:24:53
先ほどMFCスレで質問したのですが、スレ違いだったようなので
続きをこちらで質問させてください。

DLLでWH_CALLWNDPROCをフックしてるのですが
 g_hHookWnd = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, g_hDll, 0);
のように第4引数を0で呼び出してもシステムフックできず、ローカルフックしか出来ません。
何が原因として考えられるでしょうか?

179 :デフォルトの名無しさん:2006/07/06(木) 22:33:17
フックプロシージャがEXE内に有る

180 :デフォルトの名無しさん:2006/07/06(木) 22:39:12
>>178
フックをセットする関数はDLL外部に開放してEXEから呼んでいますが、
CallWndProc()自体はDLL内に定義しています。
このDLLは全てCで書かれていて正常に動作するソースをそのまま
使っているのですが、MFCのSDIアプリから呼ぶとSDIアプリのメッセージ
しか受け取れないようなんです。

181 :デフォルトの名無しさん:2006/07/06(木) 23:45:54
他プロセスにマップされたDLLとのデータ共有とか考慮してないとか。

182 :デフォルトの名無しさん:2006/07/07(金) 00:54:06
DDBでアクティブ 非アクティブ 状態を繰り返してると
突然、重くなる。
しかもメモリもどんどん食うしwww

これはバグなのか!?
DirectXと同じようにデバイスの再構築とか必要なのか

エロい人教えて!

183 :デフォルトの名無しさん:2006/07/07(金) 01:11:22
>>180
http://www.kab-studio.biz/Programing/Codian/DLL_Hook_SClass/08.html
ここのDLLの中でのグローバル化についてとか

ちなみにlParamのCWPSTRUCTへのポインタだけど
こいつをExeに直接渡しても参照エラー起こるから気を付けて

184 :デフォルトの名無しさん:2006/07/07(金) 12:10:43
例えばDOS窓を開いて、

notepad.exe [ENTER]

と打ち込むとメモ帳が開きます。
一方、メモ帳のアイコンをダブルクリックしてもメモ帳が開きますが、

質問は、メモ帳さん自身が、自分はDOS窓から起動されたのか、アイコンのダブルクリックで起動されたのか、
あるいは、他のアプリからsystem()とかcreateProcess()などで起動されたのか、
そういう違いを判定することはできますか?

185 :デフォルトの名無しさん:2006/07/07(金) 12:18:46
>>184
GetStartupInfo関数だったかな?

186 :デフォルトの名無しさん:2006/07/07(金) 12:22:05
>185さん
ありがとうございます。
早速調べてみます。

187 :デフォルトの名無しさん:2006/07/07(金) 12:35:10
>>181,>>183
ありがとうございます。
最初は>>183さんのサイトのサンプルを参考に作っていたのですが、
それで上手くいきませんでした。
(オリジナルのキーフックの方は上手く行くのですが)

しかし色々と調べてみて解決したようなので一応ご報告。
DLLでフックしたメッセージを共有メモリに詰め込んで親画面宛てに
ユーザーメッセージを送信していたのですが、SendMessage()する際の
親画面のhWndが共有されてなかった事が原因だったようです。
・・・この辺の根本的な理由はよく判ってないのですが。

SetWindowsHookEx()が返すハンドルを共有化する理由も
よく判らずにサンプルのまま使っていたので気付きませんでした。
この辺の情報がまとまった本をご存知の方がいらっしゃいましたら
ぜひ教えてください。

188 :デフォルトの名無しさん:2006/07/07(金) 12:39:54
>>184
Windows系OSの場合、プロセスの起動は最終的に "CreateProcess" APIを利用して
起動されます。
DOS窓からの起動、プログラムアイコンのダブルクリックによるExplorerからの
起動、任意のプログラムからの起動も最終的には "CreateProcess" を呼び出して
起動されますので、起動方法の違いを判定する事は出来ません。

但し、メモ帳の起動を行った親プロセスの確認を行う事は出来ます。
メモ帳の親プロセスの確認を行う事で、DOS窓からの起動かExplorerからの起動
かの確認を行うことが出来ます。

CreateToolhelp32Snapshotでググって見て下さい。

189 :デフォルトの名無しさん:2006/07/07(金) 14:08:54
ボタンコントロールを使って、ボタンを押しっぱなしにしているときと離したときで
処理を分けるにはどうすればよいでしょうか?
PUSHBUTTONだと押して離したときにWM_COMMANDメッセージが送信されるだけなんです。

190 :デフォルトの名無しさん:2006/07/07(金) 15:20:46
>>189
WM_LBUTTONUPとかWM_LBUTTONDOWNとかでは解決できない話?

191 :デフォルトの名無しさん:2006/07/07(金) 15:51:46
>188さん
詳しい解説ありがとうございました。
早速Googleしているところです。

192 :デフォルトの名無しさん:2006/07/07(金) 16:28:27
「WindowsタスクマネージャでいうCPUの使用率」のHDD版みたいのを作ってみたいのですが、
ディスクI/Oの現状アクセス状況の取得というのは可能なのでしょうか?
もし可能でご存知の方がいましたらご教授ください。



193 :デフォルトの名無しさん:2006/07/07(金) 16:38:31
可能です

194 :デフォルトの名無しさん:2006/07/07(金) 16:41:06

パフォーマンスメーター用のAPIがあったような気がする

WMIだったかな

CからWMI呼んでいいなら可能


195 :デフォルトの名無しさん:2006/07/07(金) 16:45:42
簡単なペイントソフトを作っているのですが、鉛筆のようなペン(ブラシ?)を
「WM_MOUSEMOVE」で作ってみたいのですが、マウスを早く動かすと振り切られて
点線のようになってしまいます。SetCaptureも試してみたのですがうまくいきません。
MFCではMoveToなどで解決できるみたいですが、APIではどうしたらいいでしょう?

196 :デフォルトの名無しさん:2006/07/07(金) 16:47:13
可能ですか、できますか、ありますか、知りませんか、
というような質問に対して詳細な回答をしたばかりに、

 出来るかどうかしか聞いてねーのに
 何知識ひけらかして余計なこと書いてんのw?

などと書かれて、軽い人間不信に陥ることがたまにあります。
質問者はちゃんと自分の無知がばれるリスクをとって、
「〜のやり方がわからないので教えてください」と書きましょう。

197 :デフォルトの名無しさん:2006/07/07(金) 16:48:01
>>192
WindowsNT系OSに特化できるのであれば、

パフォーマンスカウンタでググって見て下さい。

198 :デフォルトの名無しさん:2006/07/07(金) 16:51:20
>>195
MoveTo

199 :デフォルトの名無しさん:2006/07/07(金) 16:52:34
>>195
WM_LBUTTONDOWN で現在位置を保存。押してるよフラグを true に。
WM_MOUSEMOVE で、押してるよフラグがtrueなら、
前の位置から新しい位置までMoveTo,LineToで線を引く(新しい位置を現在位置として保存)。
WM_LBUTTONUP で押してるよフラグをfalseに

そんな感じ。いずれにせよ SetCapture/ReleaseCapture は適切に呼ぶ必要がある。

WM_MOUSEMOVE ではどうもイベントが間引かれているんじゃないかという疑いが
ある場合には、タイマーか何かで GetCursorPosを呼んで監視。

200 :195 :2006/07/07(金) 16:59:45
>>198
>>199
どうもお早い解答ありがとうございます。
MoveToは使えるんですね・・書いたらエラーが出たので他のやり方がある
ものだと思ってました。今度からはもっとちゃんと調べてから質問します。

201 :デフォルトの名無しさん:2006/07/07(金) 17:00:56
今は MoveToEx しか無いかもね。もしかすると。

202 :デフォルトの名無しさん:2006/07/07(金) 17:09:41
>>196
> 出来るかどうかしか聞いてねーのに
> 何知識ひけらかして余計なこと書いてんのw?

赤の他人の煽りだろ。どこまで神経質なんだよ。

203 :デフォルトの名無しさん:2006/07/07(金) 17:17:20
>>193>>194>>196>>197>>202
WMIにて解決できそうです。
レスありがとうございました。

http://207.46.19.60/japan/technet/scriptcenter/scripts/storage/disks/monitor/stmovb04.mspx

204 :デフォルトの名無しさん:2006/07/07(金) 17:34:54
便乗質問なのですが、Win32APIからWMIを使うにはどうすればよいのでしょう?

205 :デフォルトの名無しさん:2006/07/07(金) 17:46:57
>>204
ここらへんが参考になるかな?
http://zatsugaku.info/index.php?Program%2FWmi%2FProgram

206 :デフォルトの名無しさん:2006/07/07(金) 19:47:08
>>187
本は知らんけど共有化する理由は、
システムフックの場合、フックプロシージャを持つDLLは各プロセスごとにロードされるから。

単純に変数に入れといても、別のプロセス中のメッセージをフックしたときにはDLLごと別のインスタンスなので
それを考慮して、フックプロシージャ内で必要な情報はプロセスを跨いで有効な方法で持っている必要がある。

207 :187 :2006/07/07(金) 23:02:13
>>206
つまりDLLからのメッセージを受信するSDIアプリと同じスレッドにいるDLL以外は
hWndが初期化されてないので、DLLが変なハンドルに宛ててSendMessage()してた
ということなんですね。
システムフック掛けただけでDLLのスレッドがどっと増えるというイメージも
まだなんだか良くわからないけど、またこつこつと勉強していきます。
いろいろと教えて頂きありがとうございました。

208 :デフォルトの名無しさん:2006/07/08(土) 00:50:42
>>196
そこまで勘ぐらなくてもwww
相手にとって役に立つかどうか知らんけど、
自由気ままに答えればいいんじゃん。

>>192
俺もちょっと知りたかったりする。と思ったらURLマリガトー>>203 >>205

209 :189:2006/07/08(土) 02:09:52
>>190
WM_LBUTTONDOWNはボタンコントロールを押している間は発行されないみたいなんです。
たくさんのボタンで押しっぱなしと離した場合を分けたいので、適当なところでクリック、
ではダメなんです。

210 :デフォルトの名無しさん:2006/07/08(土) 02:26:23
>>209
なら氏ねよ。

211 :デフォルトの名無しさん:2006/07/08(土) 02:35:30
フィルタドライバでも作って入力を横取りしろ

212 :デフォルトの名無しさん:2006/07/08(土) 04:19:17
横取り40萬

213 :デフォルトの名無しさん:2006/07/08(土) 06:26:42
>>209
WH_KEYBOARDをフックしてlParamを調べると幸せかも

214 :デフォルトの名無しさん:2006/07/08(土) 06:29:58
>>209
ごめん間違えたw
マウスじゃフックしてもだめだな、
自分で何クリックしたか覚えとけば良いんじゃ?


215 :デフォルトの名無しさん:2006/07/08(土) 09:12:07
>>189
サブクラス化

216 :デフォルトの名無しさん:2006/07/08(土) 12:25:17
DeleteUrlCacheEntryの使い方を教えてくらはい


217 : ◆XVqm6n6is6 :2006/07/08(土) 12:39:30
教えてください。
hEditBox = CreateWindow(
TEXT("EDIT"), TEXT(""),
WS_DLGFRAME | WS_CHILD | WS_VISIBLE |
WS_TABSTOP | ES_AUTOHSCROLL | ES_LEFT,
170, 50, 500, 25, hWnd, (HMENU)EDIT_ID,
((LPCREATESTRUCT)(lParam))->hInstance, NULL
);
/* 実行ボタン作成 */
hActBtn = CreateWindow(
TEXT("BUTTOn"), TEXT("実行"), WS_CHILD | WS_VISIBLE |
BS_DEFPUSHBUTTON | WS_TABSTOP,
170, 100, 50, 30, hWnd, (HMENU)ACT_ID,
((LPCREATESTRUCT)(lParam))->hInstance, NULL
);
この二つのコントロールを作成したときTABキーでフォーカスを移動できるようにしたいんですが、
WS_TABSTOPを指定してもうまくTABキーでフォーカスが移動してくれません。
WMでキー情報取得してそれがTABキーならフォーカス移動でもいいんですが、それは何か面白くないので
なんとかならないでしょうか?

218 :デフォルトの名無しさん:2006/07/08(土) 12:40:30
>>216
そこまでわかってたらぐぐってソースコピペすれば動くと思う。

219 :デフォルトの名無しさん:2006/07/08(土) 13:05:46
>>217
IsDialogMessage ?

220 :デフォルトの名無しさん:2006/07/08(土) 13:08:27
mouse_event()でクリックイベント送ってもボタンが反応してくれない。
なぜかドラッグになったりして・・・
かと言ってペイントブラシ上でお絵かきさせても飛び飛びになる。
思い切り間隔開けると(100msくらい)ボタンにも反応するけど、
もちっと早くならんかな。

221 :デフォルトの名無しさん:2006/07/08(土) 13:12:37
実際のマウスで発生するマウスイベントの真似をする。

222 : ◆XVqm6n6is6 :2006/07/08(土) 13:23:18
コテハン忘れた・・
>>219
ダイアログにはしてないんだよ。
とりあえずコードはこんな感じに


223 : ◆XVqm6n6is6 :2006/07/08(土) 13:30:11
http://read.kir.jp/file/read51302.c
コメント適当だから逆に見にくいかもしれない

224 : ◆XVqm6n6is6 :2006/07/08(土) 13:31:58
処理はコールバックのCREATEのCreateWindowを何とか変更してTABで移動できるようにしたいんだけど
できねぇ

225 :189:2006/07/08(土) 14:02:03
>>211->>212
>>214->>215
サブクラス化でできました!!
ありがとうございましたぁ!! 。゜(゜´∀`゜)゜。

226 :デフォルトの名無しさん:2006/07/08(土) 14:04:35
>>216
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/deleteurlcacheentry.asp

227 :デフォルトの名無しさん:2006/07/08(土) 14:34:28
>>224
>>219 で正解

228 :46:2006/07/08(土) 19:46:16
みなさんちゃんと見てくれて有り難うございます!

sub1〜ですが、いい名前が思いつかないのです。捨てルーチンなのでいいんじゃないか、と思ったのですが・・・

>>48
・・・AddRef()/Release()、間抜けでした・・・ハズカシ・・・
修正しました。今度は大丈夫かと・・・↓
WBC002.LZH:SDKレベルでWebBrowserコントロールを使用して簡易ブラウザを作るサンプル(C++)

>>50
>http://www.adp-gmbh.ch/win/misc/mshtml/HTMLWindow.html
やっぱりありますか・・・どっかにはあるだろうとは思ってましたが・・・これが見つけられていれば・・・
・・・オレの費やした2週間って・・・OrZ

タブ巡回ですが、自作コントロールではSetWindowLong()で直接WS_EX_CONTROLPARENTに設定し、IsDialogMessage(g_hWndMain)する事でできました。
(でも窓APIをじかに使うのが正しいのかどうかわからない・・・)

が、WebBrowserはやっぱりできない・・・WebBrowserの場合はそもそも各HTML要素はウィンドウではないのでSetFocus()することさえできない・・・

・・・今度はActiveXコントロールをSDKレベルで作ってみようかと思ったんだけど、やっぱりどっかにありますよね・・・OrZ

229 :デフォルトの名無しさん:2006/07/08(土) 21:03:33
非アクティブ時でも実行を続けるようにしたいんですが…

230 :デフォルトの名無しさん:2006/07/08(土) 21:10:30
そうですか

231 :デフォルトの名無しさん:2006/07/08(土) 21:19:01
ウィンドウのサイズを変更できないようにするにはどうすれば良いでしょうか??

232 :デフォルトの名無しさん:2006/07/08(土) 21:19:14
できた。簡単だった。

233 :220:2006/07/08(土) 23:49:30
なんか変だと思ったら・・・
間違ってWM_LBUTTONDOWNとか送ってたよ、テヘッ (*´∀`*)


234 :デフォルトの名無しさん:2006/07/09(日) 03:37:26
>>228
WM_KEYFIRST 〜 WM_KEYLASTに対して
IOleInPlaceActiveObject::TranslateAccelerator()
IOleInPlaceActiveObjectはWebBrowser2からQueryInterface。

これで、TABキーとかその他のキーボードショートカット使えるはず。
私が昔作った時はこれでいけた。

235 :デフォルトの名無しさん:2006/07/09(日) 08:46:41
>>234に補足
メッセージループの中で、TranslateAcceleratorでS_OKが返って来たら
アクセラレータが変換されたということなので、
それ以降のTranslateMessageやDispatchMessageは実行してはいけない。

236 :228:2006/07/09(日) 10:02:02
うわ。アドレス貼り忘れた。すみません。
WBC002.LZH:SDKレベルでWebBrowserコントロールを使用して簡易ブラウザを作るサンプル(C++)
http://winscript.s41.xrea.com/upload/source/No_0016.lzh

237 :デフォルトの名無しさん:2006/07/09(日) 11:08:10
WindowsXPでVC++.NET2003使用

BGMにMIDIを使いたいんですが

・リソースから読み込み
・ループ再生
・非ループで1曲演奏し、それの終了を知りたい

などはどうすれば良いのでしょうか。

238 :デフォルトの名無しさん:2006/07/09(日) 11:14:10
MDIはやめとけ

239 :デフォルトの名無しさん:2006/07/09(日) 11:24:12
>>237
一番上はIGraphBuilderで簡単なの書いたことしかないから知らん。
残りはDirectShowのIMediaEventで可能。


240 :デフォルトの名無しさん:2006/07/09(日) 11:31:13
MCI?

241 :デフォルトの名無しさん:2006/07/09(日) 12:37:18
回答ありがとうございます。

DirectShowの使い方がいまいちよくわからず、
何とか再生することはできたのですが
ただ再生するだけならMCIの方が簡単かな、と思いました。

何か相違点などあるのでしょうか

242 :デフォルトの名無しさん:2006/07/09(日) 12:40:49
MCIは簡単な分、細かい操作が苦手だったかと

細かく制御したいなら
midiOut〜系関数を使うとか

243 :デフォルトの名無しさん:2006/07/09(日) 12:48:12
API で MIDI 扱ったら、CPU 負荷が大きくなると途端に遅延しまくって困った。
ので DirectX お勧め。

244 :デフォルトの名無しさん:2006/07/09(日) 12:53:00
CPU負荷が大きくなればDirectXでも遅延しそうだが・・・
内部で何かやってるんだろうか

ひょっとして別スレッド作って再生してなかったとか?

245 :デフォルトの名無しさん:2006/07/09(日) 13:50:45
Windowsアプリケーションのサイズ変更のしくみってどうなってるんですか
どこかでウィンドウの大きさのリージョンを毎回セットしなおしてるんでしょうか
それとも長方形ブラシかなんかで領域を塗ってマウスの左クリックが離れたら
その大きさをリージョンにセットしてるんでしょうか

今タイトルバーやウィンドウやメニューのインターフェースを自前で作ろうとしてて
ビットマップから不定形のウィンドウを作成したまではいいんですが、
不定形のウィンドウのサイズを変更しようと思ってもどうやっていいかさっぱりです。

246 :デフォルトの名無しさん:2006/07/09(日) 15:26:45
WM_NCHITTEST使って不定形ウィンドウの淵をWindowsにサイズ変更枠と認識させて、
WM_SIZEきたらリージョン再作成かな。
でも、リージョン再作成の処理によっては激しく重いかもしらん。

247 :231:2006/07/11(火) 00:22:53
解決しました。

248 :デフォルトの名無しさん:2006/07/11(火) 10:16:07
今作っているアプリAで、ライセンス有無の判定をするために、
GetVolumeInformation()を使ってディスクのボリュームのシリアル番号を確認する方法を採用しました。
問題なく動いていたのですが、
そのアプリを他の二つのアプリ(BとC)から、数秒にに一回くらいの割合で、CreateProcess()使って
数百回呼び出したところ、そのうち数回くらい、GetVolumeInformation()がエラーしました。
こんな感じです。
  アプリC → アプリB →アプリA (GetVolumeInformationエラーした)
実は、それは特定のパソコンで3回だけ連続して発生し、今は起こらなくなってしまったのです。
でも確かにエラーしたのを確認しましたし、自然に治るのも気持ち悪いので、どこかに何か問題が
あるように思うんですが、皆さん何か心当たりとかありませんでしょうか?
よろしく。

249 :デフォルトの名無しさん:2006/07/11(火) 10:24:24
よくわからんけどエラーしたの内容を具体的に書いた方がいい

250 :デフォルトの名無しさん:2006/07/11(火) 10:27:29
>249
ありがとうございます。
具体的には、GetVolumeInformation()がエラーを意味する0を返しました。
それしか分かっていません。

251 :デフォルトの名無しさん:2006/07/11(火) 11:08:42
GetLastErrorしなかった自分を呪え

252 :デフォルトの名無しさん:2006/07/11(火) 11:39:55
VS2003.NET VC++ MFC未使用です
任意のアプリケーションが起動したことを知るにはどうしたらよいでしょうか?
あるアプリを起動させておき、ターゲットアプリが起動したらアクションを起こしたいのですが。。
よろしくお願いいたします。

253 :デフォルトの名無しさん:2006/07/11(火) 11:59:17
>>252
フックでもすればいいのでは?

254 :デフォルトの名無しさん:2006/07/11(火) 12:07:17
言葉足らずですみません
ターゲットアプリが起動していなければ待機し、
起動したらフックをかけるアプリを作成したいのです。

まだフックについて勉強不足ですが、それもフックで可能なのでしょうか?


255 :デフォルトの名無しさん:2006/07/11(火) 13:13:04
有効なファイル名(ファイル名として使える文字で構成されている)かどうかをチェックするAPIってあったっけ?

256 :デフォルトの名無しさん:2006/07/11(火) 13:15:51
>>254
出来る

257 :254:2006/07/11(火) 13:53:21
>>256
ヒントいただけないでしょうか・・・?
ターゲットアプリが起動していない状態でフックをかけるということでしょうか?
起動していないとできないと思ったのですが。。。

258 :デフォルトの名無しさん:2006/07/11(火) 14:04:58
プロセス監視はだめぽ?

259 :デフォルトの名無しさん:2006/07/11(火) 14:44:12
フックって言ってもいろいろあるだろ、何のフックか書いてくれんとわからんぞ。

260 :デフォルトの名無しさん:2006/07/11(火) 14:47:44
船長に決まってるじゃないか!!

261 :デフォルトの名無しさん:2006/07/11(火) 14:52:36
赤いモサモサの事だろ

262 :254:2006/07/11(火) 15:10:14
失礼しました
フックはWH_CALLWNDPROCです

263 :デフォルトの名無しさん:2006/07/11(火) 15:15:51
>>257
グローバルフック


264 :254:2006/07/11(火) 17:00:41
WH_CBTを使ってやって見たいと思います。
ありがとうございました

265 :254:2006/07/11(火) 17:39:57
連投すみません。
起動したウィンドウがターゲットプログラムのときにTSK_CREATEを
作成アプリに通知し、作成アプリ側で受け取って操作できるようにしました。

WH_CBTフックのプロシージャ
LRESULT CALLBACK MySysHookWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode == HCBT_CREATEWND){
CBT_CREATEWND *pcw = (CBT_CREATEWND *)lParam;
if(pcw->lpcs->lpszClass == TARGET_CLASS_NAME){
SendMessage(g_hCallExe, TSK_CREATE, 0, 0);

}
return 0;
}
return CallNextHookEx(g_hSysHook, nCode, wParam, lParam); //次のフックを呼ぶ
}

アプリ側
switch(msg){
case TSK_CREATE:
MessageBox(hWnd, "起動しました", "", MB_OK);
break;
}

しかし、これで実行するとターゲットプログラムの起動前にメッセージボックスの発生が
無限ループになり、作成アプリを強制終了しないとターゲットプログラムが起動しませんでした。
TSK_CREATEを一回だけ通知し、ターゲットプログラムを起動するにはどうしたらよいのでしょうか?
よろしくお願いします。

266 :デフォルトの名無しさん:2006/07/11(火) 19:30:03
>>265

WH_CBTフック
Windowsは、 次に示す処理を行う前に、 WH_CBTフック プロシージャを呼び出す。
・ウィンドウのアクティブ化、 作成、 破棄、 最大化、 アイコン化、 移動、 サイズ変更
・システム メッセージ キューからのマウス イベントやキーボード イベントの削除
・入力フォーカスの設定
・システム メッセージ キューの同期化

あなたのコーディングでは、無限ループになります。
TSK_CREATEをキャッチして "MessageBox" を呼び出す。
その "MessageBox" のアクティブ化をキャッチして "TSK_CREATE" を発行。
TSK_CREATEをキャッチして "MessageBox" を呼び出す。

よって、"MessageBox" では無く、自前で簡単なロギングウィンドウを作成し
そのウィンドウに処理状況を出力する。

267 :デフォルトの名無しさん:2006/07/11(火) 19:31:49
266の追加
ロギングウィンドウは事前に作成しておく。

268 :254:2006/07/11(火) 20:52:26
>>266
レスありがとうございます。

if(nCode == HCBT_CREATEWND)
で、ウィンドウの作成に限定し
if(pcw->lpcs->lpszClass == TARGET_CLASS_NAME)
で、作成されたプロセスのクラスが起動を確認したいアプリのクラスと同じか確認して
TSK_CREATEの発行をターゲットアプリが起動したときに限定しているつもりだったのですが、
これでもMessageBoxのアクティブ化時にTSK_CREATEが発行されるのでしょうか?

269 :デフォルトの名無しさん:2006/07/11(火) 21:01:53
>if(pcw->lpcs->lpszClass == TARGET_CLASS_NAME)
はlstrcmp()使わなくて良いのか?

270 :デフォルトの名無しさん:2006/07/11(火) 21:03:49
>>254
この辺参照して↓
アトムなら文字列にしてから比較した方がいい。
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B106079


271 :デフォルトの名無しさん:2006/07/11(火) 21:18:55
こんばんは。
趣味でWebカメラのプログラミングを始めました。
現在傍らにある本は「ロボットの目をつくる」というトランジスタ技術の増刊号です。
この本でパン、チルト機能がついたQCamOrbitというWebカメラのプログラムが公開されており、それに挑戦していま

す。
それを参考にVisualCとOpenCVでカメラから画像を取得して処理をするところまでは出来ました。
しかしカメラを動かすところについては「あとは出来るでしょ」といった感じで省略されていました。
残念ながらボクの力では動かすことは出来ませんでした。
一週間ほど検索していましたが、とっかかりすら掴めない有様です。
最後の砦だとここにすがりつきに参りました。
どうかヒントだけでも、宜しくお願いします。

雑誌にはドライバに機能が用意されている、という記述がありました。
今はドライバが入っているCDを中心にあたっています。



目的 Webカメラをパン、チルトさせたい

環境 Windows2000
VisualC++ 6.0
QcamOrbit

272 :デフォルトの名無しさん:2006/07/11(火) 21:27:46
>>271
http://www.vector.co.jp/soft/winnt/hardware/se383160.html


273 :271:2006/07/11(火) 21:32:35
>>272
すばやい返信ありがとうございます。
しかし、残念ながらこのプログラムは私の環境では動かなかったのです。
具体的にはDevice番号が(本来は自動取得のはずなのに)取得できませんでした。
動かなくても、このソースを解読して知識を深めるべきでしょうか?


274 :271:2006/07/11(火) 21:39:04
さらに、言い訳なのですが、
このプロジェクトにはioctl2.hというヘッダファイルが入っておらず、
自分のPCではコンパイルできませんでした。

これらの話も最初の質問時にすべきでした、もうしわけありません。

275 :デフォルトの名無しさん:2006/07/11(火) 21:49:17
ドライバはUSBに機器をつないだ状態でインストールする必要があるような気がします。
ドライバがちゃんとインストールされていなければ、それほど参考にならないかもしれません。
(デバイスドライバをCreateFileで開いてDeviceIoControlで制御、という流れは参考になるかもしれませんが)
雑誌にドライバが付いてきているなら、そちらに戻ってみるのが良いと思います。


276 :デフォルトの名無しさん:2006/07/11(火) 21:59:11
>>274
ioctl2.h の内容は、vbの方を読むとこんなところでしょう。
#define IOCTL_BULKUSB_VENDORREQUEST_OUT 0x220014
#define CTL_DEVICE_NAME_ASCII "\\\\.\\filtCtlp"
#define URB_FUNCTION_VENDOR_DEVICE 0x17

typedef struct _PARAM_VENDOR_REQUEST
{
DWORD Function;
DWORD TransferFlags;
BYTE ReservedBits;
BYTE Request;
DWORD Value;
DWORD Index;
BYTE Dummy[2];
} PARAM_VENDOR_REQUEST;

#define MAX_BUFSIZE_BULK (1024 + 100)

typedef _PARAM_VENDOR_REQUEST_WRITE
{
DWORD Function;
DWORD TransferFlags;
BYTE ReservedBits;
BYTE Request;
DWORD Value;
DWORD Index;
BYTE Dummy[2];
BYTE buf[MAX_BUFSIZE_BULK];
} PARAM_VENDOR_REQUEST_WRITE;

277 :271:2006/07/11(火) 22:09:12
>>275
う〜ん、一応カメラは繋いだ状態でインストールしたつもりなのですが。
なにか不備があったかのも知れません。
しかし流れは参考になるかも知れませんが、という一文だけでもずいぶん参考になります。
すこし読む気がでてきました、ありがとうございます。

>>276
ありがとうございます。
なんとなく読んで内容を書けてしまうなんて凄いですね。
ちなみに無謀にも何も考えずこぴぺして実行したところエラーが出てしまいました。
(構文エラーが1,2個あるといった程度な気もしますが)
参考にさせてもらいます。

278 :デフォルトの名無しさん:2006/07/11(火) 22:48:03
手取り足取り教えて君なので釣りかと思ったが
まあがんがれ

ただ微妙にスレ違いな話題なので他の場所に
移動した方がよい鴨試練


279 :デフォルトの名無しさん:2006/07/12(水) 11:22:35
諸先輩方、宜しくお願いします。

IMEの状態(漢字モードON又は漢字モードOFF)を
取得する方法を教えて下さい。

280 :デフォルトの名無しさん:2006/07/12(水) 11:24:00

http://www7a.biglobe.ne.jp/~tsuneoka/win32tech/7.html


281 :279 ◆lnkYxlAbaw :2006/07/12(水) 11:54:39
「表7-5:新しいIME API」
いっぱいあるね、どりですか?


282 :デフォルトの名無しさん:2006/07/12(水) 12:23:20
>>281
全部書いてあるのに、何故たずねる?

283 :279 ◆lnkYxlAbaw :2006/07/12(水) 12:43:00
>>282
構ってほしいから。

284 :254:2006/07/12(水) 14:01:48
>>269
>>270

if(nCode == HCBT_CREATEWND)
{
CBT_CREATEWND *pcw = (CBT_CREATEWND *)lParam;
GetAtomName(LOWORD(pcw->lpcs->lpszClass), szBuf, 10);

if(!(strcmp(szBuf, "ClassName")))
{
PostMessage(g_hCallExe, TSK_CREATE, wParam, 0);
return 0;
}
}
とすることで望みどおりの動作をさせることができました
ありがとうございました


285 :デフォルトの名無しさん:2006/07/12(水) 15:34:54
C#でUpdateLayeredWindowを使用してピクセル単位の透過に挑戦しているのですが、
LayeredWindowをWMP等動画を再生してるウィンドウの上へ持って行くと、どうしてもちらついてしまいます・・・orz
(オーバレイモードだと大丈夫なようです。)
ソースはttp://yellow.ribbon.to/~azumaya/doc_dotnet_uplayeredwnd.phpとほぼ同等です。
どなた様かご教授よろしくお願いいたします。。

286 :285:2006/07/12(水) 15:53:48
すいません、補足です・・・
・フォームはTopMost=trueにしております。
・"ビデオミキシンクレンダを使う"のチェックを外しても、ちらつきが無くなるようです。

287 :デフォルトの名無しさん:2006/07/12(水) 15:54:53
>>286
どうにもならないので Vista を待ってください。

288 :デフォルトの名無しさん:2006/07/12(水) 18:47:55
こんにちは。
BMP画像を表示させるアプリケーションを作っています。
Borland C++ Compiler 5.5 でコンパイルしたところ、
リソースファイルで指定したビットマップのファイルが1Mを越えたあたりで
コンパイルエラーで実行ファイルが作成できません。
指定ファイルの上限などあるのでしょうか。

初心者で、説明がわかりにくいところもあるかと思います。
どうぞよろしくおねがいいたします。

289 :デフォルトの名無しさん:2006/07/12(水) 20:47:14
(´-`).oO(エラーの内容をなんで書かないんだろう…

290 :デフォルトの名無しさん:2006/07/12(水) 20:49:27
ようやく復旧したか

291 :デフォルトの名無しさん:2006/07/12(水) 21:19:25
>>288
自分の最高は768kbだが、そこまでは大丈夫だろう。

292 :288:2006/07/12(水) 21:30:00
288です。
どうもすみません。
BCC32 -W test.c
は問題ありません。
そのあと
BRC32 test
をすると

Borland Resource Compiler Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved.
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

とコマンドプロンプトに表示された後、
「問題が発生したため、Turbo Incremental Linker を終了します。 ご不便をおかけして申し訳ありません。」
という画面がでてきます。(エラー報告を送信する・送信しないというボタンのある画面です)

送信しないをクリックするとコマンドプロンプトの画面に戻り
「** error 1 ** deleting kaw70.exe

d:\docs\mydoc\cfile>

とコマンドプロンプトに表示されます。

つづく

293 :288:2006/07/12(水) 21:30:34
292のつづき

test.rc の中身
///
Oth1 BITMAP "4.bmp"
Oth2 BITMAP "5.bmp"
Oth3 BITMAP "6.bmp"
Oth4 BITMAP "7.bmp"
Aug BITMAP "8.bmp"
Sep BITMAP "9.bmp"
Oct BITMAP "10.bmp"
Nov BITMAP "11.bmp"
Dec BITMAP "12.bmp"
///
↑だとエラー
///
Oth3 BITMAP "6.bmp"
Oth4 BITMAP "7.bmp"
Aug BITMAP "8.bmp"
Sep BITMAP "9.bmp"
Oct BITMAP "10.bmp"
Nov BITMAP "11.bmp"
Dec BITMAP "12.bmp"
///
↑だとエラーは出ず、test.exeが作成されます。

というながれです。
ながくてすみませんが、よろしくおねがいします。

294 :デフォルトの名無しさん:2006/07/12(水) 22:14:32
>>292-293
コンパイラの問題みたいだし、スレ違いっぽいけど。

295 :デフォルトの名無しさん:2006/07/12(水) 22:18:32
>>292
それリンカが異常終了してんじゃん?
このスレでわかる人がいればいいけど。
・環境依存の話なのでBCCのスレで聞く
・リンカのバグフィックスされたバージョンを使う
ことをおすすめする。

296 :288:2006/07/12(水) 22:38:28
アドバイス、ありがとうございます。
BCCのスレで質問してみます。

297 :285:2006/07/12(水) 22:54:12
>>287
レスありがとうございます。
OSの問題という事でしょうか。。

微妙に話変わりますが、SetLayeredWindowAttributesでフォーム切り抜きをしてもちらつくんですね。
LayeredWindowはこういう仕様なのかな・・・。
あるアプリでは、画像をある色で透過させてちらつき皆無で画面に表示させていましたが、
SetWindowRgnでやってたんですかね?

298 :デフォルトの名無しさん:2006/07/12(水) 23:17:00
PCやグラフィックカードの仕様も書かずによくそんな質問が出来るな

299 :285:2006/07/12(水) 23:33:05
>>298
仕様とは私のPCのスペックの事でしょうか?
そうとなると、環境依存の現象という事ですか?

300 :デフォルトの名無しさん:2006/07/13(木) 01:16:29
エクスプローラのリストビューにはソート順を表す▲や▼マークが表示されますが
これはコモンコントロールとしてサポートされてる機能でしょうか?
もしそうであれば、どういう手順で表示するのでしょう?

301 :デフォルトの名無しさん:2006/07/13(木) 01:35:16
SPY使ってみた?

302 :デフォルトの名無しさん:2006/07/13(木) 01:42:27
>>300
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/header/header.asp

303 :デフォルトの名無しさん:2006/07/13(木) 12:44:53
メモ帳を起動して自動的にファイルを読み込むプログラムを作っていて、
ファイルを開くダイアログボックスを出すところまでは出来ているんですが、
ダイアログボックスのハンドルの取得の仕方が分かりません。
検索してもなかなか分からなかったので、
どうかお教え下さい。



304 :デフォルトの名無しさん:2006/07/13(木) 12:50:35
notepad.exe file_name

305 :デフォルトの名無しさん:2006/07/13(木) 12:50:43
日本語でおk?

306 :デフォルトの名無しさん:2006/07/13(木) 12:52:41
>>303
メモ帳だったら、コマンドラインでいけなくない?

307 :デフォルトの名無しさん:2006/07/13(木) 12:57:43
>>303
このスレ的に回答すると ShellExecute() って所か?
どちらにしろ、やり方が間違ってると思われ。

308 :デフォルトの名無しさん:2006/07/13(木) 13:02:47
>>306
将来的にアプリケーションを自動的に操作したい思っていまして、
これはあくまで練習用です。説明が足りなかったですね…
もう少し詳しく言うとCreateProcess()で起動させたプロセスに、
SendMessage()などを使用してメッセージを投げるというような形で、
処理を実現させようと考えているのですが、
まぁ要はダイアログのハンドルを取得するAPIはあるのかなと。

逆の場合だったらGetParent()を使うみたいですが。

309 :デフォルトの名無しさん:2006/07/13(木) 13:06:45
EnumChildWindowsとかで探すとか?

310 :デフォルトの名無しさん:2006/07/13(木) 13:07:24
>>307
どの辺りが間違っているのか、詳しくお聞かせ願えないでしょうか?
細かい部分の処理なのか、それとも自動化のアプローチ自体なのか。


311 :デフォルトの名無しさん:2006/07/13(木) 13:13:04
>>309
その方法で解決出来るような気がしてきました。
皆様どうもありがとうございました。

312 :デフォルトの名無しさん:2006/07/13(木) 17:11:25
糞ソフトがまた一つ増えました

313 :デフォルトの名無しさん:2006/07/13(木) 19:20:04
ユーザにファイルを選ばせたいのならダイアログが
表示された時点で成功なんじゃ?

314 :デフォルトの名無しさん:2006/07/13(木) 21:22:06
【IT】Microsoft、「Virtual PC 2004」の無償提供を開始
http://news19.2ch.net/test/read.cgi/newsplus/1152788480/


315 :デフォルトの名無しさん:2006/07/13(木) 22:39:35
>>313
いや、だからダイアログ操作するとかは練習用なんでしょ?
実際は別のことをやりたいんじゃね?

316 :デフォルトの名無しさん:2006/07/14(金) 01:48:34
win32APIを説明したサイトを見ると、関数の仮引数の名前を省略している場合があります。

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PTSTR pszCmdLine, nCmdLine)

int WINAPI _tWinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int)

VC ExpressのIDE上でコンパイルしたところ、確かにコンパイルが通ります。
しかし、まったく同じソースを、コマンドライン(cl.exe)でコンパイルしたところ、
エラーになってしまいます。以下がログメッセージです。

>error C2055: 型リストではなく、仮パラメータ リストが必要です。

これは何が原因なんでしょうか?

317 :デフォルトの名無しさん:2006/07/14(金) 01:58:44
WinMainはAPIなのか……。
引数の名前を省略できるのは言語仕様だからスレ違いだと思うが。

318 :デフォルトの名無しさん:2006/07/14(金) 03:25:38
質問です。
SYSTEMTIME構造体に入っている時刻をn分進めたり、戻したり、また、n日進めたり、戻したりするAPIはありますでしょうか?
ない場合、何か利用できるものはありませんでしょうか?C++のライブラリ(MFCとか)とかでもかまいません。
使用環境はVS2003です。

319 :デフォルトの名無しさん:2006/07/14(金) 04:31:47
SHBrowseForFolderのBIF_NEWDIALOGSTYLEを使ってできるダイアログの
新しいフォルダを作成ボタンにIDOK,IDCANCELみたいなコントロールの識別子割り当てられてますか?

320 :デフォルトの名無しさん:2006/07/14(金) 04:33:28
>>318
MSDN嫁。
SYSTEMTIME構造体のメンバを使って時間を足し引きするのはお勧めしないと書いてある。

・SYSTEMTIMEをFILETIMEに変換する(SystemTimeToFileTime()を使う)
・FILETIMEをULARGE_INTEGERにコピーする
  FILETIMEを直接足し引きするのもお勧めできない。X86だと問題なく動くだろうけど。
・ULARGE_INTEGERを使って、時間の足し引きをする(単位は100ナノ秒)
・ULARGE_INTEGERをFILETIMEにコピーする
・FileTimeToSystemTime()で、SYSTEMTIMEに直す

321 :318:2006/07/14(金) 08:31:44
>>320
レス、ありがd。

↓こんな感じでいいのでしょうか?
SYSTEMTIME stime; FILETIME ftime; ULARGE_INTEGER ulint;
GetLocalTime(&stime);
SystemTimeToFileTime(&stime, &ftime);
ulint = ftime; // or ulint.LowPart = ftime.dwLowDateTime; ulint.HighPart = ftime.dwHighDateTime;
ulint.QuadPart += 10 * 1000 * 60 * 20; //20分進める。
ftime = ulint; // or ftime.dwLowDateTime = ulint.LowPart; ftime.dwHighDateTime = ulint.HighPart;
FileTimeToSystemTime(&ftime, &stime);

> MSDN嫁。
失礼。かなり読んだのですが、ここまでたどり着けませんですた。

> SYSTEMTIME構造体のメンバを使って時間を足し引きするのはお勧めしないと書いてある。
お薦めしない理由を知ってたら、だれか解説キボン。

322 :デフォルトの名無しさん:2006/07/14(金) 09:25:46
そういう計算は考慮してないんだろう

323 :デフォルトの名無しさん:2006/07/14(金) 13:08:09
コマンドプロンプトから起動したとき、
1) 起動時に/wオプションをつけた場合はウィンドウ表示
2) つけなかった場合は、起動したコマンドプロンプトを対象にcin/coutで入出力
ということをしたいのですが、方法がわかりません。

ウィンドウアプリとして作成し、AllocConsole() APIを使用した場合、
新たにコンソールウィンドウが生成されてしまいます。
また、リダイレクトでの入力(cinでの入力)が使えません。
作成しているプログラムをprog.exeとすると、例えば
C:\> dir | prog.exe /w
↑このようにしたとき、dirの標準出力をprog.exeで読みつつウィンドウ表示もしたい。

C:\> prog.exe
Sample Program v1.0......
...
↑このように/wなしのときは通常のコンソールアプリのように実行してほしい。

324 :デフォルトの名無しさん:2006/07/14(金) 13:24:46
>>321
FILETIMEは以前memcmpで比較しようとして正しい結果が得られないで何故か悩んだ結果、宣言が下位、上位の順で並んでるからという結論に至った。

実際は、桁あふれ等を考慮しつつ自分で書かなきゃいけなくて場合分けがめんどくさいからお薦めしないだけ、もしくは仕様変えても文句いうなよ、っていう脅しだと思う。

325 :デフォルトの名無しさん:2006/07/14(金) 14:53:27
>>323

GetStdHandle()

326 :デフォルトの名無しさん:2006/07/14(金) 14:55:08
>>323

http://www.microsoft.com/japan/msdn/accessibility/general/atg_consoleaccessibility.aspx


327 :デフォルトの名無しさん:2006/07/14(金) 14:57:32
>>323

ちょっと話題から外れるけど参考までにこちらも

http://support.microsoft.com/default.aspx?scid=kb;JA;190351

328 :318:2006/07/14(金) 15:21:44
>>322,324 Thx.


329 :デフォルトの名無しさん:2006/07/14(金) 17:02:48
>>316
C++では仮引数名を省略でき、Cではできない。

VC++のIDEでプロジェクトを作るとデフォルトでは拡張子cのファイルも
C++としてコンパイルするようオプションが指定されている、/TPか何か。

>>321>>324
320の書き方からしてアラインメントの問題だろう。

330 :デフォルトの名無しさん:2006/07/14(金) 18:56:40
Wininet.DLL を使用してftpサーバ(telnetも使用可)からファイル情報を取得したいのですが、
FtpFindFirstFile,FtpFindNextFile関数ではファイル名・サイズ・最終更新日などしか取得できません。
他に、パーミッション・オーナー名・グループ名などの情報も取得したいのですが、
どのようにしたら良いのでしょうか?
言語はVB6です。よろしくお願い致します。

331 :デフォルトの名無しさん:2006/07/14(金) 19:16:44
接続先のファイルシステムに、そういうものがあるとは限らないわけだが。


332 :デフォルトの名無しさん:2006/07/14(金) 19:33:16
>>331
サーバはUNIX(AIXだったかな?)のみです
ls -al コマンドで表示される情報が取得できれば良いのですが...

333 :デフォルトの名無しさん:2006/07/14(金) 19:33:33
そういう馬鹿でも使える系のapiはそういうものだとわりきって使ってください。

334 :デフォルトの名無しさん:2006/07/14(金) 21:52:35
いまさらftpなんてつかうなよ


335 :デフォルトの名無しさん:2006/07/14(金) 22:18:26
今はftpの代わりに何を使うの?

336 :デフォルトの名無しさん:2006/07/14(金) 22:19:36
今でもftpはメジャーなので心配するな

337 :デフォルトの名無しさん:2006/07/14(金) 22:27:14
sftpに決まってるじゃん


338 :デフォルトの名無しさん:2006/07/14(金) 22:28:03
^~

339 :デフォルトの名無しさん:2006/07/14(金) 22:54:24
陰毛落としていくなよ

340 :デフォルトの名無しさん:2006/07/14(金) 23:14:15
http://www.atmarkit.co.jp/fnetwork/rensai/netpro11/netpro01.html
とりあえずこんな感じで

341 :デフォルトの名無しさん:2006/07/15(土) 05:18:15
クラス名かウインドウハンドルから、サブクラス化される前のオリジナルの
WindowProcを取得する方法ってないですか?

342 :デフォルトの名無しさん:2006/07/15(土) 07:08:37
既にサブクラス済みのウィンドウから、サブクラス前のWndProcを取るって事?
だったら無理だと思う。

343 :デフォルトの名無しさん:2006/07/15(土) 07:29:09
GetClassLongPtrで大元のウィンドウプロシージャを取得することはできると思う。
ただ2重3重にサブクラス化されていたら341はどうしたいのかが問題だ。

344 :デフォルトの名無しさん:2006/07/15(土) 09:36:00
>>341

DefaultWindowProc

345 :デフォルトの名無しさん:2006/07/15(土) 17:45:17
pu

346 :デフォルトの名無しさん:2006/07/15(土) 18:43:29
ge

347 :デフォルトの名無しさん:2006/07/15(土) 18:52:44
t Sound

348 :デフォルトの名無しさん:2006/07/15(土) 19:28:21
一応できました。タブ巡回。
WBC003.LZH:SDKレベルでWebBrowserコントロールを使用して簡易ブラウザを作るサンプル(C++)
http://winscript.s41.xrea.com/upload/source/No_0019.lzh
ですがこれが完全に正しいやり方なのか確信が持てません。みなさんはどう思われますか? 窓API的におかしい所ないでしょうか? (でも結局自作コントロールでは通用せず・・・)
  g_pOleInPlaceActiveObject->OnFrameWindowActivate(TRUE);
  g_pOleInPlaceActiveObject->OnDocWindowActivate(TRUE);
  for(;;)
  {
    if (!IsWindow(g_hWndMain))
    {
      break;
    }
    GetMessageA(&msg, NULL, 0, 0);
    hr = g_pOleInPlaceActiveObject->TranslateAccelerator(&msg);
    if (hr == S_OK)
    {
      DispatchMessageA(&msg);
    }
    else if (hr == S_FALSE)
    {
      if (!IsDialogMessageA(g_hWndMain, &msg))
      {
        TranslateMessage(&msg);
        DispatchMessageA(&msg);
      }
    }
  }
なお、IsWindow()でループ脱出するのは気にしないでください(^^;)DefWindowProc使ってるのでこうなるのです。
ここはGetMessage()==FALSEで判断されているのだと思って下さい(^^;;;)いずれウィンドウプロシージャは設置するつもりです。
で、OnFrameWindowActivate/OnDocWindowActivate()は、本当はウィンドウプロシージャのWM_ACTIVATE中で呼び出し、ステートに応じてTRUE/FALSEするのが正しいと思うのですが、なぜこれをコントロールに通知しなければならないのでしょうか?
例えばアニメーションを表示するコントロールとかで非アクティブになった時にアニメを停止するとか?

349 :デフォルトの名無しさん:2006/07/16(日) 16:05:38
質問!
w2kで/dev/randomのようなPRNG(疑似乱数生成器)は利用できますか?

350 :デフォルトの名無しさん:2006/07/16(日) 18:01:23
>>349
ヒント: Crypto API

351 :デフォルトの名無しさん:2006/07/16(日) 18:57:05
>>350
マジd
CryptGenRandom()発見!

352 :デフォルトの名無しさん:2006/07/16(日) 20:03:11
質問です。
WindowsSocketに使われてる関数 たとえば、connect()関数の中に
const struct sockaddr FAR * name だとか
const char FAR * aptval と書いてあるのですが、
FAR* って何の意味があるのでしょうか?
定義を調べてみたところ 
#define FAR far
#define far
と書いてありました。特に意味がないように感じるのですが、なぜ付いているのでしょうか?

353 :デフォルトの名無しさん:2006/07/16(日) 20:04:54
Win16時代の名残

354 :デフォルトの名無しさん:2006/07/16(日) 20:07:14
昔はfarとかhugeとかセグメントとか64kの壁とか色々大変だった

355 :デフォルトの名無しさん:2006/07/16(日) 23:08:54
vc使ってデスクトップ転送ソフト作ってるんですけど、
ビットマップのまま転送すると重たいので、
jpegなど、何らかの形で圧縮して転送しようと思います。
色々検索してるのですが、以下の条件にあうやり方が見つからなくて困ってます。
何かよい方法ありませんか?

1."できるだけ"windows標準のライブラリだけで作りたい。
(dll置くだけインストールできるようなライブラリなら使っても良いかもです)
2.メモリ上で圧縮、展開を行いたい。ハードディスクは仲介したくない。




356 :デフォルトの名無しさん:2006/07/16(日) 23:15:02
age

357 :デフォルトの名無しさん:2006/07/16(日) 23:29:32
>>355
Windowsつってもバージョンで相当変わるわけだが。
Gdiplus使っていいならpngでもjpgでも何でもどうぞ。

358 :デフォルトの名無しさん:2006/07/17(月) 00:12:25
>>357 レスどうもです。



Gdiplusってwindows2000にインストールできましたっけ?
できれば、XPと2000で動かしたいんで。

359 :デフォルトの名無しさん:2006/07/17(月) 00:16:20
>>358
インストールは出来るけどデフォでは付いてない。
再配布版gdiplus.dllを添付すれば2kもXPもOKな筈。

360 :デフォルトの名無しさん:2006/07/17(月) 00:19:06
>>359 ありがとうございます。

ちょっとやってみます。

361 :デフォルトの名無しさん:2006/07/17(月) 01:10:10
キャプチャボードからの映像信号を表示するソフトの映像部の色を
GetPixel()関数で取得したいと思ったのですが、できませんでした。
調べてみると、どうも映像がビデオレンダラーというハンドル(?)に関連していることが
原因のようです。
どうすればイイでしょうか?

362 :デフォルトの名無しさん:2006/07/17(月) 02:30:48
おれもそれ知りたいかな。
ビデオカードか何かのオーバーレイ機能だよな。多分。

363 :デフォルトの名無しさん:2006/07/17(月) 02:34:00
それは、GetPixel()でのみ失敗するかね?
それとも他の関数でも失敗するかね?

364 :デフォルトの名無しさん:2006/07/17(月) 08:14:03
>>361
オーバーレイ表示になってると思うからGetPixelじゃ無理だとおもう。
DirectShowのインタフェース取れるならISampleGrabberインタフェースで画像は取れるみたいだけど他のアプリだと‥‥

365 :デフォルトの名無しさん:2006/07/17(月) 08:22:55
「USBが入力された時」をどうすればフックできますか?
WM_の中に有るかも、だけどWM_多すぎorz


366 :デフォルトの名無しさん:2006/07/17(月) 09:13:49
>>365
意味がわからない。「USBデバイスが接続された時」?

367 :デフォルトの名無しさん:2006/07/17(月) 11:07:40
そうです。色々検索してみたけど全く出てこなかった。
検索語句が悪いのかな。
USBが接続された時、タスクバーの所に「○○が接続されました」みたいな
メッセージが出ますよね。だからAPIか何かで
そのタイミングを捕まえることができないのかなと。

368 :デフォルトの名無しさん:2006/07/17(月) 11:14:01
WDM

369 :デフォルトの名無しさん:2006/07/17(月) 11:15:49
WM_DEVICECHANGE

370 :361:2006/07/17(月) 15:28:31
>>363
GetDCはできたような・・・
>>364
そうですか。
ありがとうございました。

371 :デフォルトの名無しさん:2006/07/17(月) 15:38:40
どうでもいいかもしれないけど、
動画なんかでPrintScreenキーが使えないという話も、結局根は同じなんだろうな。

372 :デフォルトの名無しさん:2006/07/17(月) 17:27:48
>>369 サンクス

373 :デフォルトの名無しさん:2006/07/17(月) 19:30:32
>>371
出来るものもある


374 :デフォルトの名無しさん:2006/07/17(月) 23:12:27
メニューのオーナードローについて教えてください。

プログラムはほぼ出来たのですが、一点不可解なことが残っています。

サブメニューを持った項目の右横にある小さい三角のマークが、
Windows側で描画されているようです。それはいいのですが、
サブメニューをGRAYED状態にしてもマークがマウスの移動を
感知して白黒反転してしまいます。

オーナードローをしなければサブメニュー項目をGRAYEDに
すると、三角マークもグレーに固定されます。

オーナードローを使ったときに、サブメニューを持った項目
のGRAYED状態を3角マークにも反映させる方法を教えてください。

ご存知の方、よろしくお願い致します。


375 :デフォルトの名無しさん:2006/07/18(火) 01:24:16
ウェブ上のMSDNのAPIリファレンスってどうやって見るの?前は見れたのに

376 :デフォルトの名無しさん:2006/07/18(火) 01:41:17
ttp://msdn.microsoft.com/library/
見れるけど

377 :デフォルトの名無しさん:2006/07/18(火) 03:38:15
サーバエラーってなるんだけど

378 :仕様書無しさん:2006/07/18(火) 04:44:24
CImageに設定されている画像(PNG)を、
ネットワークで他のマシンに転送して表示させたいのですが、
CImageに設定されている生データ(PNG形式)を取得、設定する方法を
msdnで見つけられなくて困っています。
誰かご存知ないでしょうか?

379 :仕様書無しさん:2006/07/18(火) 04:51:04
>377
ttp://msdn2.microsoft.com/ja-JP/library/

>378
CImageクラスは、ファイルから読み込んだ画像を元の画像形式とは無関係
にビットマップ形式で保存しているので、PNGでの取得はムリ。

380 :デフォルトの名無しさん:2006/07/18(火) 18:12:11
>>379
馬鹿な俺に教えてくだされ
どう巡ったらツリービューからAPIリファレンスに辿り着くの?

381 :デフォルトの名無しさん:2006/07/18(火) 18:46:48
>>380
Win32およびCOM開発の下なんだけど、今見たらMSDN2日本語版からは消えているみたい。
こっちにはあったから、駄目だったらこっちから行ってみて。
http://msdn.microsoft.com/library/ja/

382 :デフォルトの名無しさん:2006/07/18(火) 18:52:52
日本語のは誤訳に情報欠落、古かったりってことが事欠かないから英語版見れ
http://msdn.microsoft.com/library/en-us/dnanchor/html/anch_win32com.asp

383 :デフォルトの名無しさん:2006/07/18(火) 23:08:02
IMEを叩いて文字入力をしてるのですが
IME2000では全く問題なかったのにIME2003にしたら
TranslateMessageでエラーが発生するようになってしまいました
状況は日本語入力モードでひらがなを入力し、
変換キーをおして漢字変換しようとすると
メモリ読み込みのアクセス違反エラーが発生します
変換キーを押すだけだと問題ないです

エラー時のMessageの内容
message = 256 = WM_KEYFIRST
wParam = 229 = VK_PROCESSKEY
lParam = 7929857 = ?

解決法を知ってる方、お願いします

384 :デフォルトの名無しさん:2006/07/18(火) 23:31:01
>>381-382
すまなんだ
An error occurred on the server when processing the URL.
と出るのは俺のパソの環境が悪いのかな?

385 :デフォルトの名無しさん:2006/07/19(水) 00:38:58
>>384
信心が足りんからじゃ!

386 :デフォルトの名無しさん:2006/07/19(水) 00:57:57
な、なるほど

387 :デフォルトの名無しさん:2006/07/19(水) 11:44:22
WindowsXPのC++にて「MoveFile」関数を使用しています
通常時は上手くいくのですが偶にリターン値が正常なのにも関わらず
move元ファイルが削除されておらず且つ、move先ファイルのファイルが
ロックされたままとなる場合があります

ネットワーク越しのmovefileなので動作が不安定っぽいのですが
movefileExのMOVEFILE_COPY_ALLOWEDとMOVEFILE_WRITE_THROUGHで
解決できるのでしょうか?
みなさんはネットワーク越しのファイル移動はどうやってます?


388 :デフォルトの名無しさん:2006/07/19(水) 12:53:36
このスレが妥当かどうかわからんが、regmonやfilemonその他
Windows関連の役立ち情報を公開してるsysinternalsを運営してる
winternals が MS に買収されちまったyo!!


389 :デフォルトの名無しさん:2006/07/19(水) 13:21:53
スレ違い 失せろ

390 :デフォルトの名無しさん:2006/07/19(水) 14:07:53
>>388
そうなんや。いいのか悪いのかよくわからんニュースやな。

391 :デフォルトの名無しさん:2006/07/19(水) 14:24:39
とりあえず systeniternals は全て保存しとくべきだな。

392 :デフォルトの名無しさん:2006/07/19(水) 14:24:57
>>388
sysinternalsサイトで公開されている各フリーソフトは十分に役立つ
ソフトが多いのだが。
今後も同じ様な形で運営が行われるのだろうか?。
公開が中止されたら非常に残念なことだと思う。

393 :デフォルトの名無しさん:2006/07/19(水) 14:26:35
世界中のヤツラが同じこと考えてるらしく、sysinternals のサイト劇重・・・
DbgView だけでも落としておきたい。

394 :デフォルトの名無しさん:2006/07/19(水) 14:56:47
とりあえずFirefoxのScrapbookでサイトごと落としとくかな。

395 :デフォルトの名無しさん:2006/07/19(水) 19:07:10
>>388
そりゃ大変だ。
と思ってsysinternalsのサイトを見ようとしたら、めちゃくちゃ重い。


>>392
MSが公開していない、
あるいは、OSのバージョン毎に実装を変える可能性があるので、公開すべきでないと考えている、
情報がかなりあるので、もしそうなったら残念だな。


一応ブログでは、サイトは今まで通りだし、ツールもフリーなままとは言っているけど……。



396 :デフォルトの名無しさん:2006/07/19(水) 20:22:20
windef.hに以下のコメント、コードがありました

// Win32 defines _WIN32 automatically,
// but Macintosh doesn't, so if we are using
// Win32 Functions, we must do it here

#ifdef _MAC
#ifndef _WIN32
#define _WIN32
#endif
#endif //_MAC

なんでマックに関する定義があるんですか?
win32apiってマックと何か互換性でもあるのですか?

397 :デフォルトの名無しさん:2006/07/19(水) 20:26:38
MACaddress

398 :デフォルトの名無しさん:2006/07/19(水) 20:28:03
MSはMacのソフトも開発してるから。

399 :デフォルトの名無しさん:2006/07/19(水) 20:52:28
NT4.0までPowerPCとかサポートしてたんだっけ

400 :デフォルトの名無しさん:2006/07/19(水) 20:57:48
気になってググってみたらこんなページを見つけた。
http://msdn.microsoft.com/archive/en-us/dnarvc/html/msdn_fromone.asp?frame=true

Macintosh: The Most Difficult Case以下に、Visual C++にはMAC用のクロスコンパイラが存在し、
それにはWin32 APIを実装したライブラリが付属しているということが書いてある。

401 :デフォルトの名無しさん:2006/07/19(水) 22:31:16
Mac版のIEもあるし別に不思議なことじゃないと思うが…

402 :デフォルトの名無しさん:2006/07/19(水) 22:42:51
MSにはMac部がある。

403 :デフォルトの名無しさん:2006/07/20(木) 00:02:54
マ・クベか

404 :仕様書無しさん:2006/07/20(木) 00:10:16
2ちゃんねるのトップページ、あの壺はいいものだ!

405 :デフォルトの名無しさん:2006/07/20(木) 00:26:55
Mac BUなら、日本語読みしてMac部と言えるね。
http://ja.wikipedia.org/wiki/Mac_BU

406 :デフォルトの名無しさん:2006/07/20(木) 00:46:40
そしてMac部長がいるのね

407 :デフォルトの名無しさん:2006/07/20(木) 12:01:47
APIの質問ではないのですが
ここなら詳しい方もおられると思いますので
質問させてください。

VC8のリンクの過程で
> xxx.obj : error LNK2001: 外部シンボル ""public: virtual void * __thiscall name::type<char>::`scalar deleting destructor'(unsigned int)" (??_G?$type@D@name@@UAEPAXI@Z)" は未解決です。
> xxx.obj : error LNK2001: 外部シンボル ""public: virtual void * __thiscall name::type<char>::`vector deleting destructor'(unsigned int)" (??_E?$type@D@name@@UAEPAXI@Z)" は未解決です。
のように出力されリンクできません。
http://www.thescripts.com/forum/thread263644.html
によるとVCが勝手に作るヘルパーらしいのですが
解決方法がよく解りません。
MFCやATL等は使用していません。
ご教授お願いします。

408 :デフォルトの名無しさん:2006/07/20(木) 13:08:37
スルーされますように

409 :デフォルトの名無しさん:2006/07/20(木) 15:13:17
誘導希望

410 :デフォルトの名無しさん:2006/07/20(木) 15:35:04
VC++スレ探せ

411 :デフォルトの名無しさん:2006/07/20(木) 17:13:03
コンベンショナルモミモミ

412 :デフォルトの名無しさん:2006/07/20(木) 17:50:05
ifで「COLORREF型同士が一致する場合」って
どうすればいいですか?
clr == GetPixel(hMChar , i , ib)じゃ駄目みたいなんですが

413 :デフォルトの名無しさん:2006/07/20(木) 18:05:03
あ。やっぱいいです。ごめんなさい

414 :デフォルトの名無しさん:2006/07/20(木) 18:06:33
(^ω^#)ビキビキ

415 :デフォルトの名無しさん:2006/07/20(木) 18:29:05
>>414
許してください。悪気はなかったんです!

416 :407:2006/07/20(木) 23:31:06
すいません自己解決しました。

質問、VCで抽出したのですが
見つからなかったのでここで
お願いしました。

スレ違い失礼しました。

417 :デフォルトの名無しさん:2006/07/21(金) 11:35:05
rubyでCD−ROMのトレイを開けるコード書いて

418 :デフォルトの名無しさん:2006/07/21(金) 12:08:56
mciSendString("set cdaudio door open",buf,buflen,NULL)

419 :デフォルトの名無しさん:2006/07/21(金) 13:37:51
>>418
http://tkoolup.hp.infoseek.co.jp/cgi-bin/src/tkoolup0934.png
こうなってしまうなー

スクリプトaの1行目でNameErrorが発生しました。
Undefined local valuable or method 'buf' for nil:nilclass

420 :デフォルトの名無しさん:2006/07/21(金) 14:19:10
>>419
それはさすがにスレ違いだろう・・・

421 :デフォルトの名無しさん:2006/07/21(金) 16:15:23
うちでは開いた

422 :デフォルトの名無しさん:2006/07/21(金) 16:27:23
くぱぁって開いた

423 :デフォルトの名無しさん:2006/07/21(金) 20:37:14
ひぎぃ!

424 :デフォルトの名無しさん:2006/07/21(金) 23:03:27
ら、らめぇ

425 :デフォルトの名無しさん:2006/07/22(土) 05:13:29
>>421-422
Rubyで実験した?
RGSSで実験した?

426 :デフォルトの名無しさん:2006/07/22(土) 05:35:54
Rubyならこうかな。

require 'Win32API'
mciSendString = Win32API.new "winmm","mciSendString",["P","P","I","I"],"I"
mciSendString.call("set cdaudio door open", nil, 0, 0)




427 :デフォルトの名無しさん:2006/07/22(土) 07:30:54
>>426
おかしいなあ
おんなじエラーになっちゃうよ
RGSSでためしてみたけど。

428 :デフォルトの名無しさん:2006/07/22(土) 07:53:52
社婚

429 :デフォルトの名無しさん:2006/07/22(土) 10:27:53
Cで
Windowsが最小化かどうか調べるにはどうしたらいいですか?

430 :デフォルトの名無しさん:2006/07/22(土) 10:28:32
WindowsじゃないWindowです><

431 :デフォルトの名無しさん:2006/07/22(土) 10:32:53
IsIconic

432 :デフォルトの名無しさん:2006/07/22(土) 11:03:32
ありがとうございます><

433 :デフォルトの名無しさん:2006/07/22(土) 11:46:03
Process32Nextとかで取得できるPROCESSENTRY32のszExeFileを頼る以外にイメージファイル名を得る方法はありますか?

大抵のプロセスは以下のような感じでOKなのですが
いくつかのプロセスはOpenProcessで失敗してしまいます (GetLastErrorはアクセスが拒否されたといってます

HANDLE ph = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, this->pid_ );

HMODULE mh=0; DWORD r=0;
EnumProcessModules( ph, &mh, sizeof(mh), &r );

char buf[MAX_PATH] = {0};
if( GetModuleBaseName(ph, mh, buf, sizeof(buf)) )
  result = std::string(buf);


434 :デフォルトの名無しさん:2006/07/22(土) 12:15:36
LRESULT と HRESULTの違いってなに?
ほかにもあるの?


435 :デフォルトの名無しさん:2006/07/22(土) 12:28:13
>>433
稼動中のプロセスのフルパス名を取得したいのであれば、
PSAPI.DLLを利用する方法もあります。

>いくつかのプロセスはOpenProcessで失敗してしまいます...
との事なので、NT系OSでの情報取得ですよね。

でしたら、PSAPI.DLLでググって見て下さい。

436 :デフォルトの名無しさん:2006/07/22(土) 12:29:04
>>434
HRESULTはビット毎に意味があるからよく読め
ttp://msdn.microsoft.com/library/en-us/com/html/15f3ae3e-1794-4948-a7aa-6309a703364b.asp
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_data_types.asp

437 :デフォルトの名無しさん:2006/07/22(土) 12:54:26
>>436
ありがとう。まさにばっちしのアンサー

438 :433:2006/07/22(土) 13:09:11
>>435
環境書き忘れてました. すいません Windows XP Home Edition SP2です

ttp://support.microsoft.com/default.aspx?scid=kb;ja;JP175030
PSAPI.DLLを利用する方法というのは
上記URLの「PSAPI ライブラリを使用したプロセスの列挙」 (ソースコード中では// If Windows NT 4.0以降
のことだと思われますが
hInstLib = LoadLibraryA("PSAPI.DLL");
...
lpfEnumProcesses = (BOOL (WINAPI *)(DWORD *, DWORD, DWORD*))GetProcAddress(hInstLib, "EnumProcesses");
...
lpfEnumProcesses(lpdwPIDs, dwSize2, &dwSize)
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, lpdwPIDs[dwIndex]);
と結局OpenProcessを呼んでしまっているので失敗すると思われます
違ってたらすいません


439 :デフォルトの名無しさん:2006/07/22(土) 13:30:56
>>438
アクセス拒否を回避する場合は、
LookupPrivilegeValueとAdjustTokenPrivilegesで特権を付与する。
但し、OSのアクセス権の変更可の設定に依存したと思う。

440 :433:2006/07/22(土) 14:05:37
>>439
できました. ありがとうございます
ttp://support.microsoft.com/default.aspx?scid=kb;ja;131065

441 :デフォルトの名無しさん:2006/07/22(土) 20:35:20
質問なのですが
・cygwin環境
・g++
でプログラムを作っているのですが
この度boostのregexを使おうかと思い
入れてはみたのですが。
APIプログラムじゃないソースでは動くのですが。
APIプログラムでコンパイルしたところ(コンパイルはできます
実行し、regexの部分に差し掛かったときに(boost::regex
プログラムが停止してしまいます。(問題が発生しましたと・・・
解決方法ありますでしょうかorz

442 :デフォルトの名無しさん:2006/07/22(土) 21:40:17
>>441
単にお前のプログラムにバグがあるだけだろ。

443 :441:2006/07/22(土) 22:20:24
regex regex("<[^>]+>");
この一行だけで 動いてたプログラムが止まりってしまいます。
コンパイルでエラーはでてません。

444 :デフォルトの名無しさん:2006/07/22(土) 23:23:19
NTFSのディレクトリにセキュリティ設定についてです。

やりたいことは、C:\hogehoge ディレクトリとその中の全てのファイル・サブ
ディレクトリに、Everyoneのフルコントロールのアクセス許可を追加することです。

Explorerで、C:\hogehoge のプロパティーのセキュリティタブ・詳細設定で
適用先=[このフォルダ、サブフォルダおよびファイル]のEveryoneのフルコン
トロールを追加すると、C:\hogehogeの中の全てのファイル・サブディレクトリ
にも継承元がC:\hogehogeとしてEveryone/フルコントロールが追加されます。
(これと同じことをプログラムでやりたい)

元としているプログラムは、
http://support.microsoft.com/kb/102102
で、Step14のAddAccessAllowedAce()のところをAddAccessAllowedAceEx( ...
OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE,...) に変えています。
これで、C:\hogehoge 自身のセキュリティーは目的通りにEveryone/フルコント
ロールが追加されるのですが、中のファイル・サブディレクトリにはC:\hogehoge
から継承したEveryone/フルコントロールが追加されません。(元のまま)

中のファイル・サブディレクトリに継承するには、C:\hogehoge へのセキュ
リティ追加時に、OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE を追加する以
外にやらなければならないことがあるのでしょうか?
あるいは、中のファイル・サブディレクトリ全てに対して、自前で
AddAccessAllowedAceEx( ...,INHERITED_ACE,... )のアクセス制御エントリを
追加しなければならないのでしょうか?



445 :デフォルトの名無しさん:2006/07/23(日) 00:39:05
>>441
boostスレで聞きなさい。

446 :441:2006/07/23(日) 01:28:23
お騒がせしました。
cygwinのg++でコンパイル時に
no-cygwinオプションのせいでした。

447 :デフォルトの名無しさん:2006/07/23(日) 12:13:21
現在の実行ファイルのアドレスを取得する方法を教えてください。
おねがいしまス。

448 :デフォルトの名無しさん:2006/07/23(日) 12:34:34
>>447
GetModuleFileName

この質問多いな。
つーか「アドレス」ってなんだよw

449 :デフォルトの名無しさん:2006/07/23(日) 12:37:25
リモートのを実行してるのかもしれん

450 :デフォルトの名無しさん:2006/07/23(日) 12:45:52
モジュールがロードされてるアドレスが知りたいんじゃないの?

>>447
つ GetModuleHandle

451 :デフォルトの名無しさん:2006/07/23(日) 17:35:20
×ロードされてる
○マップされてる

452 :デフォルトの名無しさん:2006/07/23(日) 18:47:51
__ImageBase

453 :デフォルトの名無しさん:2006/07/23(日) 18:52:52
そうじゃないです

454 :444:2006/07/23(日) 21:35:16
自己解決しました。

SetFileSecurity()でなく、SetNamedSecurityInfo()を使えば、既存の設定を残しての追加や
中のファイル・サブディレクトリへの継承が簡単にできました。


455 :デフォルトの名無しさん:2006/07/23(日) 23:36:28
WM_ERASEBKGNDメッセージなどでwParamに入っているデバイスコンテキストハンドルは
どういった筋のものでせうか
これ使ったときも削除or解放しなくてもよろしい?

456 :デフォルトの名無しさん:2006/07/23(日) 23:53:15
>>455
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/icons/iconreference/iconmessages/wm_erasebkgnd.asp
解放しろとは書いてないので、解放しなくていい。

457 :デフォルトの名無しさん:2006/07/23(日) 23:55:06
タブコントロールをSetWindowLongでサブクラス化したんですが
どうもセットしたプロシージャーにメッセージが入ってないみたいなんですよ(↓で確認)
switch(msg)
{
MessageBeep(-1);
これって何が原因なんですかね?エロイ人おせーてorz

458 :デフォルトの名無しさん:2006/07/24(月) 00:17:35
言語の基本からやり直せ

459 :デフォルトの名無しさん:2006/07/24(月) 00:37:07
>>457
よくわからん。
case :WM_NULLが来たって事か?

460 :デフォルトの名無しさん:2006/07/24(月) 00:49:22
いやはやお恥ずかしい
書く場所間違えてたorz
>>458-459
おかげ様で解決できました、ありがとう

461 :デフォルトの名無しさん:2006/07/24(月) 02:47:58
すいません、platform SDKを探していたのですが、>>1
Server 2003 SP1 Platform SDK Full Downloadしか結局見つからなかったのですが、
あたまにserver 2003って書いてるんですけど、これでいいんでしょうか?
当方XPです。

今後はPlatformSDKではなくFrameworkSDKで開発しろって事なんでしょうか??
見当違いな事を言ってたらすいません。

462 :デフォルトの名無しさん:2006/07/24(月) 03:10:57
>>461
Server 2003 SP1まで対応してるって話で、XPでも問題ない。
が、それで良いかは知らん。

VC++6.0だったら、February 2003使うべきだし。
VC++2005でDirectShowのBaseClassesをビルドしたい場合は、
最新のWindows Server 2003 R2 Platform SDKのを使う必要あったりするし。

463 :デフォルトの名無しさん:2006/07/24(月) 03:22:55
>>462
2003server「に」対応してるという意味ではなく、2003server「まで」っていうことなんですね
勘違いしていました。。
>DirectShowのBaseClasses
というのを今後使うかはわからないのでとりあえず
Server 2003 SP1 Platform SDK
をインストールして、必要に応じてR2のほうも入れてみます。
ありがとうございました

464 :デフォルトの名無しさん:2006/07/24(月) 12:09:26
SDKでプログラムを書いてるんですが、
FindFirstFileやFindNextFileで"."と".."を拾ってくるのは使用なんですか?

C:\やD:\について用いるとそんなことないんですが。

465 :デフォルトの名無しさん:2006/07/24(月) 12:16:31
"."はカレントディレクトリ
".."は親ディレクトリ
存在するものを拾ってるって事です。

466 :デフォルトの名無しさん:2006/07/24(月) 12:18:07
FATの頃からの仕様なんじゃないか?
root 以外のディレクトリには . と .. は実在するテーブル情報だし

467 :デフォルトの名無しさん:2006/07/24(月) 12:26:23
>>465-466
ありがとうございます。よくわかりました。

468 :デフォルトの名無しさん:2006/07/24(月) 14:48:34
ウインドウにくっついてるルートメニューにオーナードローする方法を
教えてください。普通にやっても出来ません…

469 :デフォルトの名無しさん:2006/07/24(月) 16:19:06
普通にできるが、君の言う普通が分からないのでなんとも。
ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/resources/menus/usingmenus.asp?frame=true#_win32_Creating_Owner_Drawn_Menu_Items

470 :デフォルトの名無しさん:2006/07/24(月) 17:12:51
>>469
お答えどうも有難うございます。

リンク先に書いてあるオーナードローのためのWM_MEASUREITEMや
WM_DRAWITEMはルートメニューに対しては飛んで来ないようです。

ルートメニューというのはウインドウのタイトルバーの下について
いる横長のメニューバーのつもりで書きました。他に言い方が分
らないので…。

やりたいことは、ルートメニューバーにビットマップで絵を
貼り付けたいのです。どこか勘違いしていますでしょうか? 

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

471 :デフォルトの名無しさん:2006/07/24(月) 18:14:27
とりあえずどうやっているか大まかに書いてくれ。
MFC使ってるかどうかも。
今のままだとプログラムが間違ってるとしか答えられん。

472 :デフォルトの名無しさん:2006/07/24(月) 18:27:27
>>471
済みません。勘違いしてました。

プログラムを見直したところ、メッセージが飛んできたようです。
お騒がせしました。プログラムはWin32APIのみです。

有難うございました。

473 :デフォルトの名無しさん:2006/07/24(月) 20:00:17
>>470
ビットマップを貼り付けたいだけならオーナードローする必要は無いぞ。
http://www.kumei.ne.jp/c_lang/sdk/sdk_42.htm

474 :472:2006/07/24(月) 20:06:38
たびたび済みません。メニューのオーナードローをやっています。

OSはXPなんですが、画面のプロパティ→デザイン→詳細設定
の、メニューで使われるフォントの名前やフォントサイズを
ユーザーの設定にそって反映させたいと考えています。

その辺を取得するにはどうしたらいいでしょうか?

SystemParametersInfo かとも思ったのですが、
ちょっとパラメータの詳細が分りませんでした。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpsysinf/html/_win32_systemparametersinfo.asp
この辺には欲しいパラメータ内容が見当たりません。
見落としていますでしょうか?

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


475 :472:2006/07/24(月) 20:08:38
>>473
返事有難うございます。単に貼り付ける用途のフラグでは機能的に
ちょっと足りないと思いました。なのでオーナードローしています。

476 :デフォルトの名無しさん:2006/07/24(月) 22:37:41
>>466
FATには実在するけどNTFSではntfs.sysがでっち上げてる。
たぶん"."と".."は存在するに決まってると決めつけているプログラムを
混乱させないため

477 :デフォルトの名無しさん:2006/07/24(月) 22:46:10
>>476
素朴な疑問だけど、cygwinで表示されるiNodeNoとリンク数も実態を表していないと言うこと?
少なくとも見かけ上はリンクに見えるのだけど。

478 :デフォルトの名無しさん:2006/07/24(月) 23:37:05
>>472
SPI_GETNONCLIENTMETRICSで

479 :デフォルトの名無しさん:2006/07/25(火) 00:16:58
この前も言ったけどウェブ上のMSDNのAPIリファレンスが見れねえ!
同じ症状の人いねえ?

480 :デフォルトの名無しさん:2006/07/25(火) 00:17:41
>>479
日本語版?英語版?

481 :デフォルトの名無しさん:2006/07/25(火) 00:18:15
>>480
お早い返事どうも
両方!

482 :デフォルトの名無しさん:2006/07/25(火) 00:44:30
窓が無いとメッセージ受け取れないうんこ仕様

483 :デフォルトの名無しさん:2006/07/25(火) 00:47:40
>>476
嘘つくな

484 :デフォルトの名無しさん:2006/07/25(火) 01:18:49
>>477
Cygwinのリンク数の表示はOSネイティブのものをさらにいじってる
ディレクトリのリンク数は中のファイル数を表すように見えるけど
実際には一切カウントされてないとか
>>483
はいはいあなた様の言うことがすべて100%完璧に正しいです
ディスクをダンプしてみた結果もntfs.sysの逆アセンブル結果もすべて幻です
これで満足しましたか

485 :デフォルトの名無しさん:2006/07/25(火) 03:31:44
>>482
ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_postthreadmessage.asp

486 :デフォルトの名無しさん:2006/07/25(火) 04:20:07
CreateDialogでダイアログベースの窓作ったんだけど
WM_INITDIALOGじゃなくてWM_CREATEがくるのはなぜ?

487 :デフォルトの名無しさん:2006/07/25(火) 06:54:52
>>484
>ディスクをダンプしてみた結果もntfs.sysの逆アセンブル結果もすべて幻です
>これで満足しましたか

頭悪いなぁ。
そこが嘘だと言ってるのではなく、>>476の「たぶん」以降が嘘だと言ってるのだ。


488 :デフォルトの名無しさん:2006/07/25(火) 06:58:50
---dll側-------
void HogeHoge(HWND hWnd)
--------------
typedef void*(*FUNC)(HWND);

hInstdll=LoadLibrary(dllへのフルパス);
dllfunction=(FUNC)GetProcAddress(hInstdll,"HogeHoge");
dllfunction(hWnd);

たぶんFUNCの定義が間違ってるのが原因だと思うのですが、何度試行錯誤してもうまくいきません
へるぷみーorz

489 :デフォルトの名無しさん:2006/07/25(火) 07:26:21
typedef void (*FUNC)(HWND);

490 :デフォルトの名無しさん:2006/07/25(火) 08:13:26
SetTimer()でTIMERPROCを指定する時、コールバック関数はstaticにしないと
いけませんよね?(理由はわからないのですが)
そうすると、コールバック関数の中からコールバック関数の属するメンバに
アクセスするにはメンバもstaticにしないとコンパイルが通りませんが、
それでは複数のインスタンスを生成して同時処理をする場合に各インスタンスに
別々の設定を渡すことが出来なくなります。
VC++なのでCWnd::OnTimer()という方法もありますが重くなりそうなので、
自作クラスで何とかしたいのですが何か良い方法はあるでしょうか?
マルチスレッドならスレッドごとに独立して利用できるのかな?

491 :デフォルトの名無しさん:2006/07/25(火) 08:17:34
>>490
API云々の前にC++を勉強しなおせ。

492 :デフォルトの名無しさん:2006/07/25(火) 08:21:01
>>490

>SetTimer()でTIMERPROCを指定する時、コールバック関数はstaticにしないと
>いけませんよね?(理由はわからないのですが)

C++ならそう

Cならそんなことはない


493 :デフォルトの名無しさん:2006/07/25(火) 08:21:43
シングルトンクラスにしとけ

494 :デフォルトの名無しさん:2006/07/25(火) 08:22:52
>>491
具体的にはどの辺をやり直せば良いでしょうか?

495 :デフォルトの名無しさん:2006/07/25(火) 08:27:22
>>493
シングルトンだと1個しか実体がないので複数のインスタンスで
別々の設定のタイマー処理ができないように思うのですが、
シングルトンでマルチスレッドならうまくいくのかな?

>>492
C++だけなんですか・・・なんでだー orz
この辺調べたほうがいいのかな?

496 :デフォルトの名無しさん:2006/07/25(火) 08:27:44
マルチスレッドにした方が楽になると思う

497 :デフォルトの名無しさん:2006/07/25(火) 08:54:01
http://www.codeproject.com/cpp/SetTimer__non-static.asp

>>492さんのご指摘を受けて検索キーワードに「C++」を加えたら
こんなのが見つかりました。
これもシングルトンもどきしてるし、マルチスレッドにするほうがいいのか・・・
マルチスレッドのオーバヘッドも気になったんですけど試してみます。
>>492-496 ありがとうございました。

498 :366:2006/07/25(火) 08:59:04
TimerProcっておまけの引数がないんだね。
グローバルにIDとオブジェクトを対応付けさせるしかないと思う。
と書こうとしたら、IDが使えると思いついた。このIDはUINT_PTR型だから大きさも問題ない。

class Hoge
{
public:
  UINT_PTR SetTimer(HWND hwnd, UINT elapse)
  {
    return SetTimer(hwnd, reinterpret_cast<UINT_PTR>(this), elapse, TimerEntry);
  }
private:
  void TimerProc(HWND hwnd, UINT msg, UINT_PTR id, DWORD time);

  static void CALLBACK TimerEntry(HWND hwnd, UINT msg, UINT_PTR id, DWORD time)
  {
    reinterpret_cast<Hoge*>(id)->TimerProc(hwnd, msg, id, time);
  }
  static std::map<UINT_PTR, Hoge*> TimerProcMap;
};

499 :デフォルトの名無しさん:2006/07/25(火) 08:59:41
ああ名前の366は間違いだ、すまん。

500 :デフォルトの名無しさん:2006/07/25(火) 09:00:25
TimerProcMapも不要だ。

501 :デフォルトの名無しさん:2006/07/25(火) 09:13:10
確かSetTimerの数に上限あるから気をつけてね

マルチスレッドでも上限あるけど

どっちがいいかな
場合によるかな

502 :デフォルトの名無しさん:2006/07/25(火) 09:19:43
>>494
staticでないメンバ関数には、何らかの方法でthisを渡してやらなければならない(コンパイラが)
Win32 APIは、あらかじめ決められた呼び出し規約を使う。
メンバ関数と、APIの呼び出し規約は違う。

503 :デフォルトの名無しさん:2006/07/25(火) 09:54:05
>>489
ありがとう!

504 :472:2006/07/25(火) 11:48:31
>>478
どうもありがとうございます

505 :デフォルトの名無しさん:2006/07/25(火) 16:56:35
タイマーつけたら動作不安定になったヽ(`Д´)ノ
SetとKillを繰り返したらダメとかありますか?

506 :デフォルトの名無しさん:2006/07/25(火) 17:00:18

質問があります。
インターネットエクスプロラーの画面で、ツールバーとその下のアドレス入力部分
の間に区切り線(横線)がはいってるのですが、どうやって表示しているのですか?
 自分はラインを引いてそれっぽく見えるようにしたのですが・・・
どなたかよろしくお願いします。

507 :デフォルトの名無しさん:2006/07/25(火) 18:25:51
>>506
CreateWindow TOOLBARCLASSNAME

ところでwinnyのUI右上あるBBSボタンとなりの▲はapiの機能?

508 :デフォルトの名無しさん:2006/07/25(火) 20:01:54
>>507
たぶんVCLのTSpeedButton。
ウィンドウハンドル持たない(VCLによる)独自描画ボタン。

509 :デフォルトの名無しさん:2006/07/25(火) 20:15:31
>>508
ふむふむ・・・どうもー

510 :デフォルトの名無しさん:2006/07/25(火) 20:57:14
素敵なキーボードランチャを実現するのための
スマートでエレガントな方法を教えてください。
精力は尽くしましたがわかったことは下記の通りです。お願いします。
・任意のキーを使いたいのでRegisterHotKey()は役不足?
・SetWindowsHookEx?WH_KEYBOARD_LL?なにそれ
・AttachThreadInput?なんかほげほげって聞いたけど

511 :デフォルトの名無しさん:2006/07/25(火) 21:00:06
役不足・・・

512 :デフォルトの名無しさん:2006/07/25(火) 21:31:35
役不足w

513 :デフォルトの名無しさん:2006/07/25(火) 21:37:32
DirectInput

514 :デフォルトの名無しさん:2006/07/25(火) 21:42:27
おおむね
>・SetWindowsHookEx?WH_KEYBOARD_LL?なにそれ
で間に合うと思う。

515 :デフォルトの名無しさん:2006/07/25(火) 23:09:14
役不足・・・(´・ω・`)・・・

516 :デフォルトの名無しさん:2006/07/25(火) 23:27:47
ミディアムレア

517 :506:2006/07/26(水) 00:40:58
>>507
ありがとうございます
CreateToolbarEXでは境界線が表示できないということですか?
試しにあしたCreateWindow TOOLBARCLASSNAMEでやってみます。

518 :デフォルトの名無しさん:2006/07/26(水) 00:42:53
  _, ,_
( ゚Д゚)

519 :デフォルトの名無しさん:2006/07/26(水) 00:48:57
timeSetEvent関数のコールバック関数は割り込みと考えていいの?
カウンタとか参照用変数を作った場合、同期オブジェクトでロックしなくておk?

520 :デフォルトの名無しさん:2006/07/26(水) 01:10:10
>>519
別スレッドから呼ばれる。

521 :デフォルトの名無しさん:2006/07/26(水) 01:12:08
>>519
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_timeproc.asp
>Applications should not call any system-defined functions from inside a callback function,
>except for PostMessage, timeGetSystemTime, timeGetTime, timeSetEvent, timeKillEvent, midiOutShortMsg, midiOutLongMsg, and OutputDebugString.

522 :デフォルトの名無しさん:2006/07/26(水) 01:16:32
>>516
焼く不足?

523 :510:2006/07/26(水) 20:50:06
>>514
ありがとう愛してるよ
おおむね間に合ったけどなんかこえーよガタガタ

524 :デフォルトの名無しさん:2006/07/26(水) 20:56:48
こわい?何が?

525 :デフォルトの名無しさん:2006/07/26(水) 21:49:04
MessageBoxのウインドウ(クライアント領域)に、アプリ側からどこかに処理を滑り込ませて
描画する方法はありませんか?

グローバルのメッセージループをフックするとか…(←適当言ってます)
もし可能であればご教示ください。


526 :デフォルトの名無しさん:2006/07/26(水) 21:51:44
ShellExecute()でmailtoを使いsubject等を指定してメール新規作成Windowを開くことはできますが、
添付ファイルを指定することはできないんでしょうか。

527 :デフォルトの名無しさん:2006/07/26(水) 21:53:27
mailto に関連づけられたMUA次第じゃね?

528 :デフォルトの名無しさん:2006/07/26(水) 21:55:42
OEでできればそれでいいんですが…
やり方あったら教えてくださいませ

529 :デフォルトの名無しさん:2006/07/26(水) 22:04:03
>>525
昔ある雑誌にMessageBoxの前でSetTimerつかって、
コールバック関数内でMessageBoxのウィンドウハンドル取得して
アイコンをセットしてるコードが載ってたなぁ。

530 :デフォルトの名無しさん:2006/07/27(木) 00:44:02
Becky!だと引数にファイル渡せば、
添付ファイル付きで新規作成になるけど、OEはシラネ。

531 :デフォルトの名無しさん:2006/07/27(木) 01:07:25
OEならIEのようにオートメーションでどうにでもできそうな気がする。

532 :デフォルトの名無しさん:2006/07/27(木) 08:44:42
SMTP鯖と直接お話しすれば無問題

533 :デフォルトの名無しさん:2006/07/27(木) 09:35:48
>>532
素POPはなんとかなるけど SMTP は少しめんどっちい
つか、そこまでいくと メールクライアントになれるじゃん

534 :デフォルトの名無しさん:2006/07/27(木) 10:50:54
いまどきのSMTPはTLSだったり認証あったりするからなぁ

535 :デフォルトの名無しさん:2006/07/27(木) 11:47:48
超初心者ですんません。

ほぼ最初の最初で、つまづいてます。

GetStockObject(WHITE_BRUSH);
TextOut(hdc, 10, 10, (LPCSTR)str, strlen(str));
とかの関数を使ってMakeしようとすると

undefined reference to `GetStockObject@4'
undefined reference to `TextOutA@20
といわれてエラーになります・・・

もちろん<windows.h>はインクルードしていますし
これらの関数を使わなければ
CreateWindowとかShowWindowは問題なく通り
ウインドウを表示させることはできます。なぜなんでしょ・・・?

536 :デフォルトの名無しさん:2006/07/27(木) 12:01:19
>>535
開発環境を書こう

そのエラーはおそらくリンカの吐いてるエラー
gdi32.libをリンカに追加しる

537 :デフォルトの名無しさん:2006/07/27(木) 14:11:43
joyGetPosExについてなんですが、
http://www.microsoft.com/japan/msdn/academic/Articles/DirectX/01/
のソース例を見ると、32768って言う数字があるのですが、
これはスティックが中心にある時はこの数字が返ってくるって事なんですか?

自分のソースでjoyGetPosExを使ってスティックの情報を取ると100とか200で左右に動かせてしまいます。

ちょっとよく分からないのでこのこといついて詳しく書いてるサイト等あれば教えてください。

538 :デフォルトの名無しさん:2006/07/27(木) 16:35:35
>>536
コンパイラはMinGW+MSYS、環境はEclipseCDTです。

-lgdi32オプションつけてコンパイルしたらうまくいきました、ありがとうございました。

539 :デフォルトの名無しさん:2006/07/27(木) 19:52:10
SendInput でマウスをドラッグして移動させる時に「MOUSEEVENTF_ABSOLUTE」というパラメータ
を付けているのですが、これを使うと座標単位がピクセル単位ではないのでうまく移動ができません。
ピクセル単位でドラッグできる方法はありますでしょうか?

540 :デフォルトの名無しさん:2006/07/27(木) 19:57:02
>>539
自前で変換しる。

でも、なんでマウスの移動の単位は、あんな単位なのだろう。
ピクセル単位だと、何か問題があるのかな。

541 :デフォルトの名無しさん:2006/07/27(木) 20:03:09
実行時にウインドウと一緒にコマンドプロンプトみたいなのが表示されてかっこ悪いんだけど、表示させない方法とかある?

542 :539:2006/07/27(木) 20:03:33
変換する基準とかありますか?
65535を解像度で割ったりとかしたけどダメでした。

543 :デフォルトの名無しさん:2006/07/27(木) 20:15:12
>>541
ある

544 :デフォルトの名無しさん:2006/07/27(木) 20:20:57
教えてくださいおながいします

545 :デフォルトの名無しさん:2006/07/27(木) 20:33:24
>>544
キンモー☆

546 :デフォルトの名無しさん:2006/07/27(木) 20:53:18
>>544
環境がわからんし、どうやっているのかもわからんのでなんとも。

547 :デフォルトの名無しさん:2006/07/27(木) 20:58:27
>>544
コマンドプロンプトのウインドウに壁紙の画像を貼り付ける

548 :デフォルトの名無しさん:2006/07/27(木) 21:16:20
それだとちっちゃい壁紙画像が出てきてよけいに変な気が。

549 :デフォルトの名無しさん:2006/07/27(木) 21:46:32
>>541
開発環境が分からないので何とも言えないが、コンソールプログラムから
ウィンドウの作成を行っているのかな?。
つまりスタートアップルーチンは、WinMain でななく main だとしたら、
スタートアップルーチンを main から WinMain に換えるのと makefile を
若干修正するだけでプロンプト画面は表示しなくなる。

550 :デフォルトの名無しさん:2006/07/27(木) 22:24:25
>>539-540
入力デバイスのキャリブレーションを想定してるからじゃね?
(ペンデバイスや障害者用デバイスなどなど)

SystemParametersInfoになんかあった気がするが・・・
違うかな?

551 :デフォルトの名無しさん:2006/07/27(木) 22:45:10
-mwindowsオプション付けてみたらなぜか消えたぜ、おまいらありがとう

552 :デフォルトの名無しさん:2006/07/27(木) 23:56:29
WinMainの返り血って決まりとかあるですか?

553 :デフォルトの名無しさん:2006/07/28(金) 00:05:06
>>552
http://msdn.microsoft.com/library/ja/jpwinui/html/_win32_winmain.asp

554 :デフォルトの名無しさん:2006/07/28(金) 00:25:04
>>551
cygwin|mingwかよ。環境書けやコルァ

555 :デフォルトの名無しさん:2006/07/28(金) 00:47:22
>>525
自アプリなら素直にダイアログ作れ
そうじゃなければAdvanced Windows
>>551
ちなみに -mwindows 付けたなら -lgdi32 はいらないはずだ確か

556 :デフォルトの名無しさん:2006/07/28(金) 00:54:16
ttp://ruffnex.oc.to/kenji/text/api_hook/
例えば、user32.dllで定義されているMessageBox関数をフックしたい場合、
まずはHook_MessageBoxAとHook_MessageBoxWの2つの置き換え関数を作成します。
どこに作成してもよいのですが、ターゲットのプロセスに注入しないことには
フックできませんから、DLLとして作成しておきます。
そのDLLをターゲットプロセスへ注入すると、DLLは最初に
CreateToolhelp32Snapshotを使ってすべてのモジュールを探索します。
そして、そのモジュールひとつひとつに対してインポートセクションを持っているかどうかを調べ、
持っていたらMessageBoxAのアドレスをHook_MessageBoxAへ、
MessageBoxWのアドレスをHook_MessageBoxWへ書きかえます。
これでMessageBox関数が実行されたら、注入されたDLL内にある
Hook_MessageBoxAとHook_MessageBoxWが呼び出されることになり、
見事APIをフックすることができると考えられます


557 :デフォルトの名無しさん:2006/07/28(金) 04:13:11
ダイアログプロシージャにはwindowsx.hの
メッセージクラッカは使えないの?

558 :デフォルトの名無しさん:2006/07/28(金) 07:49:23
>>557
ググると見つかるが、一工夫必要。
http://www.google.co.jp/search?q=%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E3%83%97%E3%83%AD%E3%82%B7%E3%83%BC%E3%82%B8%E3%83%A3%20%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%AF%E3%83%A9%E3%83%83%E3%82%AB%E3%83%BC

559 :デフォルトの名無しさん:2006/07/28(金) 17:32:14

DIBSectionでBMPの読み方そしえてくれまsんか?


560 :デフォルトの名無しさん:2006/07/28(金) 18:04:30
>>558
サンクス
気軽に聞いちゃったけど
ググりを怠るといけませんね

561 :デフォルトの名無しさん:2006/07/28(金) 18:33:33
自分のIPを取得するAPIを教えてください

562 :デフォルトの名無しさん:2006/07/28(金) 18:41:18
GetMyIP();

563 :デフォルトの名無しさん:2006/07/28(金) 18:41:51
あ、すみません。
グローバルIPです。ルーターを使っていても自分のグローバルIPを取得する方法を教えてください

564 :デフォルトの名無しさん:2006/07/28(金) 18:43:06
GetGlobalIP();

565 :デフォルトの名無しさん:2006/07/28(金) 19:11:07
>>563
UPnPで取れるはずだが、簡単で汎用的な方法は無い。

566 :デフォルトの名無しさん:2006/07/28(金) 20:15:10
モニタの省電力周りの事を調べています。具体的には、

1・モニタ省電力モードへ切り替えるAPI(→画面が消え、モニタの電源ランプがスタンバイになる)
2・省電力モードから復帰するAPI(→モニタの電源が入り画面が表示される)
3・電源オプションのプロパティにある「モニタの電源を切る」の設定を変えるAPI

特に1番と2番の情報を教えて下さい。APIの名前だけでも結構です。
解る範囲で検索してもノートパソコンの新情報とかそういうユーザー視点の情報しか発見できませんでした。
2番については、省電力になった後SetCursorをランダム座標で呼び出すテストをやってみましたが案の定だめでしたw

よろしくお願いします。

567 :デフォルトの名無しさん:2006/07/28(金) 20:23:20
SC_MONITORPOWER をググってみてごらん>>566

568 :デフォルトの名無しさん:2006/07/28(金) 20:28:24
>>567
それぽいのが出てきました。これ専用のAPIなんて無かったのですね。ちょっと試験してみます。
ありがとうございました。

569 :デフォルトの名無しさん:2006/07/28(金) 20:30:39
タスクバーのDesk Bandを表示/非表示させるAPIってないんでしょうか。
COMインターフェイスのメソッドでもいいです。

ツールバーのCLSIDを渡すような感じのものを想像してるんですが

570 :デフォルトの名無しさん:2006/07/29(土) 03:18:08
修飾子"WINAPI"と"CALLBACK"は両方とも__stadcallと定義されていますが、
どのように使い分けるのでしょうか?

571 :デフォルトの名無しさん:2006/07/29(土) 04:07:45
CALLBACKは自分が定義したOSから呼ばれる関数に付ける
WINAPIはOSが定義した自分が呼び出す関数に付けるけど
関数ポインタでも使わない限り自分で書くことはないでしょ

572 :デフォルトの名無しさん:2006/07/29(土) 04:21:12
>>571
WinMainがあるじゃん。

573 :デフォルトの名無しさん:2006/07/29(土) 06:23:43
DLL

574 :デフォルトの名無しさん:2006/07/29(土) 08:52:01
WINAPIはDLLのエクスポート関数に付けてる、俺は。

575 :デフォルトの名無しさん:2006/07/29(土) 09:41:35
fh=CreateFile(fnm,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); // ファイルオープン
lpBuf=(LPBYTE)GlobalAlloc(GPTR,GetFileSize(fh,NULL)); // バッファ確保
ReadFile(fh,lpBuf,GetFileSize(fh,NULL),&dummy,NULL);
CloseHandle(fh);

//いろいろポインタ取得
lpInfo=(LPBITMAPINFO)(lpBuf+sizeof(BITMAPFILEHEADER));
lpfh=(LPBITMAPFILEHEADER)lpBuf;

lpBmpInfo=new BITMAPINFO;
CopyMemory(lpBmpInfo,lpInfo,sizeof(BITMAPINFOHEADER));

width=lpInfo->bmiHeader.biWidth;
height=lpInfo->bmiHeader.biHeight;

lpPixel= new DWORD [width*height*3];
CopyMemory(lpPixel, &lpfh->bfOffBits ,sizeof(width*height*3));

//ファイルメモリ バイバイ
GlobalFree(lpBuf);
/* DIBSection作成 */
hbmpBMP = CreateDIBSection(NULL, lpBmpInfo, DIB_RGB_COLORS, (void **)(&lpPixel), NULL, 0);
/* DIBSection用メモリデバイスコンテキスト作成 */
hdcBMP = CreateCompatibleDC(hdc);
/* DIBSectionのHBITMAPをメモリデバイスコンテキストに選択 */
SelectObject(hdcBMP, hbmpBMP);
うまくいかない・・・


576 :デフォルトの名無しさん:2006/07/29(土) 11:02:13
lpPixelはCreateDIBSectionが確保する。だから、確保する必要ない。
(つーか、DWORD * width * height * 3って96bitビットマップかよ!)
だから、CopyMemoryはCreateDIBSectionの後で。

lpfh->bfOffBitsは、ファイルの先頭からデータまでのバイト数だから、
&lpfh->bfOffBitsではなく、lpBuf+lpfh->bfOffBitsだね。

sizeof(width*height*3)って、width*height*3のsizeを求めてもしゃーないやろ。
それにビットマップは横1ラインが4バイト境界で有る必要がある。
計算式は('A`)マンドクセ

577 :デフォルトの名無しさん:2006/07/29(土) 11:29:38
>>576
thx。
修正しめみます。


578 :デフォルトの名無しさん:2006/07/29(土) 12:24:54
一部を白く
for (y=0;y<44;y++)
{
for (x=0;x<width;x++)
{
*( lpPixel+x*3+ y*width )=255;//B
*( lpPixel+x*3+1+y*width )=255;//G
*( lpPixel+x*3+2+y*width )=255;//R
}
}

<(T◇T)>わぁああああ!
http://gamdev.org/up/img/6849.gif


579 :デフォルトの名無しさん:2006/07/29(土) 12:26:06
間違えた
*( lpPixel+x*3+ y*width*3 )=255;//B
*( lpPixel+x*3+1+y*width*3 )=255;//G
*( lpPixel+x*3+2+y*width*3 )=255;//R


580 :デフォルトの名無しさん:2006/07/29(土) 12:41:57
ビットマップは上下反転している。
lpPixelがLPDWORDのままでないかい?
x*3+y*widthバイトではなく、(x*3+y*width)*sizeof(DWORD)バイト進んだ位置をさすことになるぞ。
代入もDWORD単位だから、255ということは0x000000FFが書き込まれる。

width*3ではなく、4バイト境界でそろえた数値をかける必要がある。

581 :デフォルトの名無しさん:2006/07/29(土) 13:26:30
kita---------------------!!!

LPDWORD lpPixel

LPBYTE lpPixel

に変更したら直りました
さんきゅ〜!


582 :デフォルトの名無しさん:2006/07/29(土) 14:07:23
CharNextWの存在価値を教えてください
普通に「++」でインクリメントしても、
今のところ期待するような結果が返ってきます

583 :デフォルトの名無しさん:2006/07/29(土) 14:12:15
>>569ですが、その後もいろいろ調べた結果、
不可能と判断しました。失礼しました〜


584 :デフォルトの名無しさん:2006/07/29(土) 14:16:24
>>582
サロゲートとか考慮してんじゃないの?

585 :デフォルトの名無しさん:2006/07/29(土) 14:34:42
>>582
CharNextWが無かったら、CharNextを使ってるソースをUnicodeビルドできないじゃん。
いちいちインクリメントに書き直せとでも?

586 :デフォルトの名無しさん:2006/07/29(土) 16:39:19
>>572
WinMainにはAPIENTRYという専用の修飾子がある

587 :デフォルトの名無しさん:2006/07/29(土) 17:03:26
ちょっと教えて

ウィンドウで「常に最前面に表示」と「常に最前面に表示を解除」の切り替えをやりたいのです。
@選択されたウィンドウが「常に最前面に表示」なら「常に最前面に表示を解除」
A選択されたウィンドウが「常に最前面に表示」でないなら「常に最前面に表示」
て感じ
設定するのはSetWindowPosでうまくいってるんだけど、
現在の状態(最前面?そうでない?)がどっちなのか判断できません。
どうやったらいいですか?

588 :デフォルトの名無しさん:2006/07/29(土) 17:07:17
iReturnStatus = GetWindowLong(hWndBuf, GWL_EXSTYLE);
if (iReturnStatus & WS_EX_TOPMOST)

でできまちた
ごめんちゃい

589 :デフォルトの名無しさん:2006/07/29(土) 19:56:30

質問があります。
エディットコントロールで特定の入力だけを処理するには(例えばリターンのみ)ウィンドウのクラス化をすると
簡単にできたのですが、コンボボックスで同じことをやるにはどうすればよいですか?キー入力の横取りができません
どなたか教えてください。

590 :デフォルトの名無しさん:2006/07/29(土) 20:00:39
>>589
コンボボックスのエディットコントロールをサブクラス化する。

591 :589:2006/07/29(土) 20:40:14
>>590
GetComboBoxInfoを使用してエディットボックスのハンドルを収得
してエディットボックスのサブクラス化ですね。ありがとうございました

しかし、エディットコントロールとエディットボックスは同じと
考えて問題ないのでしょうか・・・

592 :デフォルトの名無しさん:2006/07/29(土) 20:56:50
タスクバーにあるタスクリストに表示されている、特定の(自分以外のプロセスの)エントリーをタスクリストから消す方法というのは、あるのでしょうか?
どなたか教えてください。


593 :デフォルトの名無しさん:2006/07/29(土) 21:11:40
ITaskbarList

594 :592:2006/07/29(土) 21:36:28
おぉ。
素早い返信ありがとうございます。
早速、
http://www.runan.net/program/tips/sdk_10_ITaskbarList.shtml
とかを見ながらためしてみようと思います。


595 :デフォルトの名無しさん:2006/07/29(土) 22:12:23
よろしかったら教えて下さい。
よくゲームなどで情報を表示している小窓みたいなので
(ネトゲのステータス表示してる子窓とかチャットウィンドウみたいなの)
そういうのでスキンを使ったみたいに見た目をカスタマイズしてるのって
どうやってやっているんですか?
自力で窓作るのも無駄な気がするし…

596 :デフォルトの名無しさん:2006/07/29(土) 22:18:26
ゲームのGUIはほぼゼロから手作り
DXUTのGUIはスキンサポートしてるみたいだけど

597 :デフォルトの名無しさん:2006/07/29(土) 22:20:06
>>595
板違い

ゲ製作技術
ttp://pc8.2ch.net/gamedev/

598 :デフォルトの名無しさん:2006/07/29(土) 22:32:44
>>596
ゲーム作ってるわけじゃなかったのであまり深く考えていませんでしたが
ちょっとそっち方面で調べてみますありがとう


599 :デフォルトの名無しさん:2006/07/29(土) 22:38:38
うぃんどうりーじょんのことがききたかったのかもしれん

600 :デフォルトの名無しさん:2006/07/29(土) 23:33:40
これのことじゃないの?
ttp://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.asp


601 :デフォルトの名無しさん:2006/07/29(土) 23:42:41
>>595
ウィンドウ枠含め全て自前で描画し、WM_NCHITTESTを適切に処理してあげるとか?

602 :デフォルトの名無しさん:2006/07/30(日) 06:25:48
>>598
htmlでメニュー作る感じに画像で作る、丸いとことかさ

603 :デフォルトの名無しさん:2006/07/30(日) 09:59:44
エディットボックスに入力した文字をファイルに保存したり
ファイルから読み込んだ文字をエディットボックスに表示したりしたいんだけど、どうすればいいの?

604 :デフォルトの名無しさん:2006/07/30(日) 10:15:34
>>603
Edit_GetText, Edit_SetText
その前にWindowsプログラム関連の書籍か数多く出版されているので、
それらの本でプログラムの基礎を学ぶことをお勧めする。

605 :デフォルトの名無しさん:2006/07/30(日) 10:55:25
>>604
ありがとう
今までDirectXとかゲームに近い方ばかりやってたからWinAPI本持ってないや
今度見てみる

606 :デフォルトの名無しさん:2006/07/30(日) 11:12:01
速攻ゲーム開発かスゲー

607 :デフォルトの名無しさん:2006/07/30(日) 15:35:23
ウィンドウを生成・管理するクラス作りたいんだけど、
そこにウィンドウプロシージャを埋め込むにはどうしたらいい?

608 :デフォルトの名無しさん:2006/07/30(日) 16:02:02
>>607
staticにする。

609 :デフォルトの名無しさん:2006/07/30(日) 18:21:58
ごめん言い方が悪かった
ウィンドウを生成・管理するクラスWindowに
メンバ関数としてウィンドウプロシージャを組み込むにはどうしたらいい?
WNDCLASSEX構造体にプロシージャなメンバ関数WndProc()へのアドレスを設定しようとしてもエラーで入らない

宣言
(LRESULT CALLBACK) Window::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

問題箇所
WNDCLASSEX wcex;
wcex.lpfnWndProc= this.WndProc;

エラー内容
error C2228: '.WndProc' の左側はクラス、構造体、共用体でなければなりません
型は 'Window *const ' です。

610 :デフォルトの名無しさん:2006/07/30(日) 18:23:18
C++の基本からやり直せ。

611 :デフォルトの名無しさん:2006/07/30(日) 18:38:36
>>608でFAなのに

612 :デフォルトの名無しさん:2006/07/30(日) 18:45:17
>>609
staticなウィンドウプロシージャから個々のクラスの
ウィンドウプロシージャを呼べばいい。
これは色んなところで議論されてるから
ググばすぐ見つかると思う。

613 :デフォルトの名無しさん:2006/07/30(日) 19:09:25
>>610-612
スマソ、理解力不足だった
ググってみたところそれらしいのがあったんでその通りにしてみたら問題なくビルドできた
ttp://qwerty.s2.xrea.com/XC2CCCAB82FBBB2B9CDA4CBA4B7A4C6A4CFA4A4A4B1A4CAA4A4XWindowsSDKXA5ECA5B7A5D42FX2.xhtml

>>608
サンクス

614 :デフォルトの名無しさん:2006/07/30(日) 19:19:18
ある数字配列を作製し、テキストで出力するプログラムを作っているのですが、
コンパイル後、実行すると「問題が発生したため・・・」のウィンドウが出てしまいます。
どうも次のレスに記述するソースの「問題の行」と示したところがまずいようなんです。
(そこの記述を消すとエラーが起こらない)
なぜまずいのでしょうか??

615 :614:2006/07/30(日) 19:19:27
#include <windows.h>
#include <math.h>

int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow) {
 int bittbl[ 1024 ];
 int n;
 int n2;
 int n_harf;
 HANDLE hFile;
 DWORD dwWriteSize;
 PSTR header = TEXT( "int bittbl[] = {\n" );
 PSTR bit;
 PSTR footer = TEXT( "};" );
 hFile = CreateFile( "bittbl.h" , GENERIC_WRITE , 0 , NULL , CREATE_ALWAYS ,  FILE_ATTRIBUTE_NORMAL , NULL );
 WriteFile( hFile , header , lstrlen( header ) , &dwWriteSize , NULL );
//数列bittbl[n]作製
〜省略〜
//数列をテキストへ出力
 for( n=0;n<1024;n++ ){
  wsprintf( bit , "\t%d ,\n" , bittbl[ n ] ); ←問題の行
  WriteFile( hFile , bit , lstrlen( bit ) , &dwWriteSize , NULL );
 }
 WriteFile( hFile , footer , lstrlen( footer ) , &dwWriteSize , NULL );
 CloseHandle( hFile );

 return 0;
}

616 :デフォルトの名無しさん:2006/07/30(日) 19:29:07
bitのメモリはどこで確保してるんだ?
APIより先にC言語の基本からやり直せ

617 :デフォルトの名無しさん:2006/07/30(日) 19:42:37
物凄い初心者な質問なんだけど
ウィンドプロシージャで最後にDefWindowProcに渡すようになってる所で
switch文でdefault使って他はreturn 0とかやる場合とウィンドプロシージャの最後に直接returnでやる場合と
色々見かけるような気がするんですが、これはどっちでも変わらないんでしょうか?

switch文の各処理が終わった後の処理が変わるような気がするんですが
違いとかあるんでしょうか?

618 :デフォルトの名無しさん:2006/07/30(日) 19:47:48
MSDNに
「メッセージを処理したときは0を返せ」って書いてるだろ?
裏を返すとメッセージを処理しなかったときはDefWindowProcを返せってこと。
大半のメッセージについてはDefWindowProcも0を返すだけだから
違いが見えにくいかもしれないけど

619 :デフォルトの名無しさん:2006/07/30(日) 19:47:53
>>617
言ってる通りなんじゃね?

620 :614:2006/07/30(日) 20:01:05
>>616
とくにメモリ確保しなくても同じようなことが他のプログラムではできたのですが・・・
仕方ないので、そのプログラムを改造して数列をテキスト出力しました。

621 :デフォルトの名無しさん:2006/07/30(日) 20:05:50
>>618-619
各メッセージ処理が終わった後に0返さずさらにDefWindowProcしてるのが
あったような気がしたのでふと疑問に思ったのですが、勘違いかもしれないですね。
何か変に考えすぎていたのかも
でも、DefWindowProcが大抵0返すのなら、上記のような感じでも
無駄っぽい気はするけど、そんな問題ないって感じなのかな
ありがとうございました。


622 :デフォルトの名無しさん:2006/07/30(日) 20:11:07
>>621
自分で処理した後デフォルト処理したい時もあるだろ

623 :デフォルトの名無しさん:2006/07/30(日) 20:20:13
>>622
確かにそういわれれば…
疑問が解消されましたありがとう

624 :デフォルトの名無しさん:2006/07/30(日) 20:33:37
>>620
>とくにメモリ確保しなくても同じようなことが他のプログラムではできたのですが・・・
こええなおいw 問題の行で確保してないメモリ領域に書き込んでるぞ。

625 :614:2006/07/30(日) 20:40:52
>>624
そのプログラム、ちょっといじると同様のエラーが起こるようになりました!
PSTR bit の宣言時に PSTR bit = TEXT( "\t%1024 ,\n" ) とすれば問題なくなりましたが、
ちょっとかっこわるい気がします。
他にメモリを確保する方法を教えてください。

626 :デフォルトの名無しさん:2006/07/30(日) 20:44:54
えー

627 :デフォルトの名無しさん:2006/07/30(日) 20:51:03
>>625
だからC言語の基本からやり直せ

628 :デフォルトの名無しさん:2006/07/30(日) 21:18:19
>>625
PSTR bit; を TCHAR bit[65536]; に書き換える。
そんなにいらないとか言われてもしらん。

629 :デフォルトの名無しさん:2006/07/30(日) 21:25:30
そんなにいらない

630 :デフォルトの名無しさん:2006/07/30(日) 21:35:47
>>628
> PSTR bit の宣言時に PSTR bit = TEXT( "\t%1024 ,\n" ) とすれば問題なくなりましたが、
> ちょっとかっこわるい気がします。
とかほざいてる奴に解決策だけ教えてもかえって有害な気がするけどなあ

631 :614:2006/07/30(日) 21:43:01
>>628
できました!
ありがとうございました!

632 :デフォルトの名無しさん:2006/07/30(日) 21:57:54
既に子ウィンドウ(WS_CHILD)として作成してしまったウィンドウを、
親ウィンドウから切り離して、強制的にメインウィンドウにさせることは可能でしょうか?


633 :632:2006/07/30(日) 21:58:37
>>628
そんなにいらない

634 :デフォルトの名無しさん:2006/07/30(日) 22:04:55
ワロス

635 :デフォルトの名無しさん:2006/07/30(日) 22:29:12
614やばいよ、やばすぎるよ…。


636 :デフォルトの名無しさん:2006/07/30(日) 22:36:47
>>632
SetParent(NULL)したらSetWindowLongでWS_CHILDを外してWS_POPUPを付けるようにとMSDNが言っている。

637 :632:2006/07/30(日) 23:10:41
>>636
できるんですか!?ものすごく裏技チックなので無理かと思ってました。
ありがとうございます。MSDNで公式に発表されてる処理だとは。ワロス

638 :デフォルトの名無しさん:2006/07/31(月) 03:00:16
タスクトレイのアイコンにバルーンチップ出すようにしたんですけど
このときポコっていう通知音が邪魔くさいんです。なんとか消すようにできませんか?

639 :デフォルトの名無しさん:2006/07/31(月) 03:10:08
win2000,VC6です

メモリの使用についてテストしたくて以下のコード書いたのですが
実行後タスクマネージャでメモリ使用量を確認しても640kbしか消費してません
60MB消費されると思っていたのですが
どうしてですか?

#include <windows.h>
#include <cstdio>
int main() {
PVOID mem = VirtualAlloc(NULL,60000*1024,MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
 if (mem != NULL) printf("ok");
 scanf("%s",mem);
}

640 :デフォルトの名無しさん:2006/07/31(月) 03:24:31
>>639
VirtualAllocでぐぐったら一番上に出てきたが?
質問する前に自分で調べような。

641 :639:2006/07/31(月) 03:30:06
>>640
ごめん。そのページ読んでたんだけどよくわからなかったんだ


コミット済み このページには物理記憶域が割り当てられていて、
アクセス保護コードによってアクセスは制御されています。
このページの読み取りまたは書き込みを最初に試みた場合にのみ、
システムは各コミット済みページを初期化し、物理メモリへロードします。


つまり、コミットしてても実際にそこへ何か書き込まなければメモリは実際には
確保されないということですか?

642 :639:2006/07/31(月) 03:37:58
わかった!!ありがとう>>640

以下のコードだとタスクマネージャのメモリ使用量は
636kbでした

PVOID mem = VirtualAlloc(NULL,60000*1024,MEM_RESERVE | MEM_COMMIT,PAGE_READWRITE);

これを以下にするとメモリ使用量は640kbになりました

PVOID mem = VirtualAlloc(NULL,60000*1024,MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
mem = "aiueo";

これはaiue0\0という6バイトの文字列がコミットした領域に書き込まれて、
その4kbのページングファイル一つがメモリに読み込まれたということですね

で、以下のようにすればちゃんとメモリ使用量が60MBになりました

PVOID mem = VirtualAlloc(NULL,60000*1024,MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
FillMemory(mem, 60000*1024,0);

やっと、寝れる

643 :デフォルトの名無しさん:2006/07/31(月) 03:47:31
PVOID型の宣言を調べようと
windef.hを見てたんだけど
LPVOIDはあるけどPVOIDがありません

PVOIDはどのヘッダファイルで定義されているのでしょうか?


644 :デフォルトの名無しさん:2006/07/31(月) 03:56:52
つgrep

645 :デフォルトの名無しさん:2006/07/31(月) 08:39:37
プログラム起動中に
スクリーンセイバーを作動をさせないようにする関数はありますか?


646 :デフォルトの名無しさん:2006/07/31(月) 08:43:15
>>645
ない。
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B403844

647 :643:2006/07/31(月) 09:22:38
>>644
windef.hからインクルードされてる
winnt.hにありましたどうもです

648 :デフォルトの名無しさん:2006/07/31(月) 09:26:26
>>638
コンパネのサウンドで無音に設定汁

649 :デフォルトの名無しさん:2006/07/31(月) 10:34:25
>>646

禿しくありがとうございますた

650 :デフォルトの名無しさん:2006/07/31(月) 10:40:53
きも

651 :デフォルトの名無しさん:2006/07/31(月) 12:48:11
PCVOIDが用意されていないのが残念

652 :645:2006/07/31(月) 13:40:25
>>646
ありがとうございます。
できました


653 :デフォルトの名無しさん:2006/07/31(月) 13:57:10
初めまして。
一つ聞きたいことがあったので、皆さんに質問させていただきます。
ダイアログボックス内のエディットボックスにおいて、例えばボタン1を押すとエディットボックス内に「OK」と表示されるとします。
次にボタン2を押したときに、前の「OK」を消さずに
    OK
    NG
と改行して表示させたいのですが、どのようにすればよいのでしょうか?
普通にSetDlgItemTextでやると前のを上書きして消えてしまうし、かといって違う方法が思いつかなくて困っています。
ネットでもMFCでかかれたものはのっているのですが、APIで書かれているものがないのでこちらにて質問させていただきました。
お手数をおかけいたしますが、よろしくお願いいたします。

654 :デフォルトの名無しさん:2006/07/31(月) 14:04:15
>>653
EM_SETSEL
EM_REPLACESEL

655 :デフォルトの名無しさん:2006/07/31(月) 14:32:58
>>648
むむ、てことはシステム通知音をプログラム側でいじるようにすればいいのか。
おk−調べてみるぜ

656 :デフォルトの名無しさん:2006/07/31(月) 14:43:56
>>655
本気で言ってるのかw

657 :デフォルトの名無しさん:2006/07/31(月) 14:55:36
>>653
GetWindowText
lstrcat
SetWindowText

658 :デフォルトの名無しさん:2006/07/31(月) 15:32:08
SendMessage関数はプロシージャを直接呼び出し、処理を終えてから制御を返すとありますが、

送信先のウィンドウがアクティブのときは確かにそうなのですが、
送信先のウィンドウが非アクティブの時は処理をすることなく即座に制御が返ってきます。

これはなぜですか?

659 :デフォルトの名無しさん:2006/07/31(月) 15:47:39
・どんなメッセージを送ったのか
・非アクティブの時処理をしてないことをどうやって確認したのか

660 :658:2006/07/31(月) 16:09:40
・どんなメッセージを送ったのか
 ユーザー定義メッセージ
  #define WM_USER_ESC_FLAG (WM_USER + 0)
  SendMessage(hMainWnd, WM_USER_ESC_FLAG, 0, 0);
 です。

・非アクティブの時処理をしてないことをどうやって確認したのか
 ビープ音で確認しました。
  switch (msg) {
    case WM_USER_ESC_FLAG:
      MessageBeep(-1);


661 :658:2006/07/31(月) 16:11:33
ああ、ちなみに送り主はフック.DLLです。

662 :デフォルトの名無しさん:2006/07/31(月) 16:15:12
>>661
非アクティブなプロセスはMessageBeepで音を出せない。
とかいうことはないのか?

663 :デフォルトの名無しさん:2006/07/31(月) 16:19:19
>>662
だせます

664 :デフォルトの名無しさん:2006/07/31(月) 17:46:20
ファイルにデバッグログを出力してもう少し詳しくトレースしてみたら?
MessageBeepとかちょttあやしい

665 :デフォルトの名無しさん:2006/07/31(月) 18:33:53
WM_USER+n はコントロールメッセージとかぶるけど大丈夫?

666 :デフォルトの名無しさん:2006/07/31(月) 19:04:57
使って良いのはWM_APP以降だわな

667 :デフォルトの名無しさん:2006/07/31(月) 21:33:17
まぎらわしいねん

668 :デフォルトの名無しさん:2006/07/31(月) 23:45:32
WM_APP以降ってコントロールメッセージとかぶることにMicrosoftが言い出してから
後付けで言い出したんだけどな

669 :デフォルトの名無しさん:2006/08/01(火) 00:24:49
日本語でどうぞ。

670 :デフォルトの名無しさん:2006/08/01(火) 08:55:32

先ほどスクリーンセイバーについて質問しました者ですが
勘違いをしていました。

事情があってスタンバイ等の設定ができないので
プログラム起動中は スタンバイ || 休止状態を
させないプログラムを作りたいのです。

しかしスクリーンセイバーを止めてもスタンバイ || 休止状態に入って
しまいました。(無知でした)

スタンバイ等を抑止する方法はあるのでしょうか?

デスクトップ等に SendMessage 等でキーコードを送信したり
マウスカーソルの位置を定期的に変えたりと試しましたがどれも
失敗です。今は電池をスペースキーに置いて席を離れています。



671 :デフォルトの名無しさん:2006/08/01(火) 09:01:06
>>670
WM_POWERBROADCASTのPBT_APMQUERYSUSPENDに対してBROADCAST_QUERY_DENYを返す。

672 :デフォルトの名無しさん:2006/08/01(火) 09:10:23
>今は電池をスペースキーに置いて席を離れています
ワロス

673 :デフォルトの名無しさん:2006/08/01(火) 10:34:09
ユーザーが任意の数だけビットマップを読み込めるプログラムを作成しているのですが
その数だけメモリDCを増やさなければいけません。
いくつまで増やしていいものでしょうか?
お願いします。

674 :デフォルトの名無しさん:2006/08/01(火) 10:50:19
確保できなくなるまで

675 :673:2006/08/01(火) 11:09:09
>>674
メモリDCってかなり重いんじゃないですか?

676 :デフォルトの名無しさん:2006/08/01(火) 11:25:14
途中で勝手に質問を変えるな

677 :デフォルトの名無しさん:2006/08/01(火) 11:28:14
どこまでCPUに負担かけていいんですか?とか聞いてるようなもの

678 :デフォルトの名無しさん:2006/08/01(火) 11:29:43
ユーザーが任意のテキストファイルを読み込めるプログラムを作成しているのですが
その数だけメモリを増やさなければいけません。
いくつまで増やしていいものでしょうか?
お願いします。

679 :デフォルトの名無しさん:2006/08/01(火) 11:30:22
確保できなくなるまで

680 :デフォルトの名無しさん:2006/08/01(火) 11:32:44
物理的な限界
論理的な限界
のいずれかに達するまで

681 :673:2006/08/01(火) 11:43:54
すみませんでしたつД`)

682 :デフォルトの名無しさん:2006/08/01(火) 13:19:40

アニメ BEST100
ttp://www.animedepot.biz/DVDlist/2005years_best.htm

1位
http://www.animedepot.biz/DVDlist/title/KVDVD0542.htm
2位
http://www.animedepot.biz/DVDlist/title/KVDVD0518.htm
3位
http://www.animedepot.biz/DVDlist/title/A18D2492.htm
4位
http://www.animedepot.biz/DVDlist/title/KVDVD0533.htm
5位
http://www.animedepot.biz/DVDlist/title/A18D2480.htm
6位
http://www.animedepot.biz/DVDlist/title/KVDVD0512.htm
7位
http://www.animedepot.biz/DVDlist/title/KVDVD0502.htm
8位
http://www.animedepot.biz/DVDlist/title/KVDVD0521.htm
9位
http://www.animedepot.biz/DVDlist/title/KVDVD0505.htm
10位
http://www.animedepot.biz/DVDlist/title/KVDVD0508.htm

683 :デフォルトの名無しさん:2006/08/01(火) 15:29:43
>>582
今更だけど、WCHARはUTF-16だから、
CharNextWはサロゲートペアのことも考えてくれるのではないか?

684 :デフォルトの名無しさん:2006/08/01(火) 19:32:14
何にせよ内部実装を隠蔽してくれるという観点から
大いに意味アリだよね

685 :デフォルトの名無しさん:2006/08/01(火) 23:35:15
質問です。
WinAPIで何かのキーを押したときに何か違うキーも押したことにするってできますか?

Kを押したら一緒にF12も押したことにしてくれるみたいな。

686 :デフォルトの名無しさん:2006/08/01(火) 23:35:35
Windows 2000くらいからはサロゲートを考慮してくれそう

687 :デフォルトの名無しさん:2006/08/02(水) 00:03:54
分割ウィンドウを作ろうと思っているのですが、
どういう実装にするのが普通なんでしょうか?
自作は最後の手段として、ヘッダーコントロールで
代用しようと思ったら、その子にしたコントロール専用の
通知メッセージが届かなくなり、使い物になりませんでした。
やはりMFCのを使うのが無難なのかな・・・

688 :デフォルトの名無しさん:2006/08/02(水) 00:24:44
>>687
MFCかWTLをお勧めする。

689 :デフォルトの名無しさん:2006/08/02(水) 01:10:36
わかるよそのMFC使いたくない気持ちつД`)

690 :687:2006/08/02(水) 08:20:13
>>688
やはりそれが普通ですか。
とりあえずWTLの方は未経験なので
使ってみたいと思います。
thxでした。

691 :デフォルトの名無しさん:2006/08/02(水) 15:51:31
こんにちは。ちょっと質問させてください。

ある2つのプログラムをメンテナンスしています。
仮に「pg-1.exe」と「pg-2.exe」とします。
pg-1、pg-2は、ともにほぼ常時稼動するプログラムです。
pg-1はpg-2からCreateProcessで起動され、pg-1は起動された直後に
ウィンドウのタイトルの文字列をファイルに記述します。
ユーザーはpg-2上のボタンを押すことでpg-1を再起動することができます。
pg-2はボタンが押されたら、ファイルに記述された文字列を元にFindWindowし、そのウィンドウに
WM_CLOSEをPostします。終了したことを確認してから再度CreateProcessする仕組みです。

pg-1にバグが見つかって修正した場合、新しいpg-1.exeに入れ替える際の作業手順は次の形です。
1. 実行中のpg-1.exeのファイル名をpg-1-bk.exeに変更。
2. 新しいpg-1.exeを同じフォルダにコピー。
3. pg-2上のボタンを押して再起動。

この結果pg-1.exeは終了されるのですが、その後起動されるのがたまになぜかpg-1-bk.exeだったりします。
しかし、pg-2.exe内でのCreateProcessでは第一引数、第二引数で固定的に「pg-1.exe」を
指定しているのです。

私の頭で考えつくのは、システムのディスクキャッシュみたいなものがあって、
そこの内容が実際のファイル名の変更についていってなくて、新しいpg-1.exeを起動したつもりが
元のpg-1.exe(現pg-1-bk.exe)が起動されたのか?とかぐらいなんですが
入れ替えたpg-1.exeが起動されるようにするにはどうしたらいいんでしょうか?

普段はVB6erであんまり慣れてないので、お手柔らかにお願いします。m(_ _)m

692 :デフォルトの名無しさん:2006/08/02(水) 16:05:00
>>691
> 1. 実行中のpg-1.exeのファイル名をpg-1-bk.exeに変更。
> 2. 新しいpg-1.exeを同じフォルダにコピー。

はどうやってるの?
pg-1.exeが動作中でファイルがロックされてて失敗してないか?

693 :デフォルトの名無しさん:2006/08/02(水) 16:27:48
>>692

今のところエクスプローラ上でファイル名変更、コピー出来てます。
入れ替え後のファイルのプロパティを表示すると、バージョンも変わっているので、
入れ替わっていると思います。

694 :658:2006/08/02(水) 16:37:58
原因がわかりました

誤:
#pragma data_seg(".sharedata")
HHOOK g_hHookWnd_gm = 0;
#pragma data_seg()
HWND hMainWnd = 0;

正:
#pragma data_seg(".sharedata")
HHOOK g_hHookWnd_gm = 0;
HWND hMainWnd = 0;
#pragma data_seg()

こういうオチでした…
メッセージを送るときはWindowHandleも共用にしておかないとダメなんですね

695 :デフォルトの名無しさん:2006/08/02(水) 17:06:25
ビットマップの左上の1ピクセルの色を取得したいのですが、
GetPixelじゃメモリ上にあるカラーを取得できません。
ピクセルビットを読み込む他の方法があれば教えてください。
お願いします。

696 :デフォルトの名無しさん:2006/08/02(水) 17:12:46
DCをメモリ上のものにすれば良いのでは?

697 :695:2006/08/02(水) 21:14:10
あ、ホントだ。すみませんでした。ありがとうございます。

698 :デフォルトの名無しさん:2006/08/03(木) 00:50:36
age

699 :デフォルトの名無しさん:2006/08/03(木) 04:19:07
>>694
最新のMSDN(英語版)を見ると、CallNextHookExの第1引数はNULLを渡せばいいことになってる。
だから、g_hHookWnd_gmを共用にしなくてもいいかも。

700 :デフォルトの名無しさん:2006/08/04(金) 08:46:13
仮想キーの自動入力プログラムってどんな感じでやればいいんですかね

701 :デフォルトの名無しさん:2006/08/04(金) 09:13:01
キーダウンのメッセージを投げる

702 :デフォルトの名無しさん:2006/08/04(金) 10:39:16
GetForegroundWindowでウインドウハンドルを取得して、
SetWindowPosでそのウインドウの"常に前面表示”を切り替えるプログラムを作ったんですが、
PhotoshopやLunascape等アプリのウインドウだとそのウインドウがアクティブになってる時しか利きません。
メモ帳だといつでも利くんですが、なんでですか?

703 :デフォルトの名無しさん:2006/08/04(金) 10:55:28
http://msdn.microsoft.com/library/ja/jpwinui/html/_win32_getforegroundwindow.aspをよく見ろ

704 :デフォルトの名無しさん:2006/08/04(金) 17:22:41
質問です。
LoadLibraryでDLLをロードしてGetProcAddressで関数を呼び出しています。
この関数から呼出し元のプログラム中の別の関数を呼び出すことは可能ですか?
コンパイラはMinGW(gcc)を使っています。
VC++なら可能、という回答でもありがたいです。
よろしくお願いいたします。

705 :デフォルトの名無しさん:2006/08/04(金) 17:48:47
>>704
関数ポインタを渡せば出来そうだけど、
DLLが外部に依存したらDLLの意味がないだろ。

706 :デフォルトの名無しさん:2006/08/04(金) 18:45:24
>>703
どうもありがとうございます。
NULLってなくなるってことですよね?解決策はありませんでしょうか?

707 :デフォルトの名無しさん:2006/08/04(金) 19:30:09
>>705
コールバックさせたいのかも

708 :704:2006/08/04(金) 19:59:16
>>707
ご推察の通り、コールバックです。
問題のDLLは本体に対するプラグインでして、依存しても差し支えありません。

Unix/Linux では関数ポインタを使わなくても呼出し元のコールバック関数が
呼び出せているので、Windows でも同じようにできないかなと考えています。

引続きよろしくお願いいたします。

709 :デフォルトの名無しさん:2006/08/04(金) 20:10:25
>>708
Unixの勝手は知らないが、Windowsは関数ポインタを渡すのが一番手っ取り早いだろ。

710 :デフォルトの名無しさん:2006/08/04(金) 20:12:45
>>708
設計がおかしい。

711 :デフォルトの名無しさん:2006/08/04(金) 20:21:28
>>708
DLLにしろEXEモジュールにしろ、その中の各関数は本体モジュールの
ベースアドレスからの相対アドレスで管理されているから、エクスポート
されていない関数の場合は、その関数名からその関数が存在するアドレス
を求めるのは無理なので、コールバック呼び出しは無理だと思う。
"GetProcAddress" は、エクスポートテーブルからそのAPIの位置を特定
している訳だし。

メインソース内のサブルーチンをエクスポート宣言できれば、多分、その
モジュールのベースアドレスから関数のアドレス位置を特定できると思う。

712 :デフォルトの名無しさん:2006/08/04(金) 20:22:59
>>708
Susieプラグインなんかはアプリ側からDLLへ関数ポインタ渡してる(画像展開の途中経過表示など)

713 :デフォルトの名無しさん:2006/08/04(金) 20:25:22
普通はDLLにコールバック関数を登録するI/Fを入れとくもんだが

714 :デフォルトの名無しさん:2006/08/04(金) 21:16:48
>>706
SetWindowPosしたいだけなら普通FindWindowを使ってハンドルを取得する

715 :706:2006/08/04(金) 22:04:53
>>714
レスありがとうございます。
FindWindow使い方がよく分からなかったのでGetForegroundWindowにしたんですが、
この二つで取得できるハンドルは同じウインドウでも違うものなんですか?

716 :デフォルトの名無しさん:2006/08/04(金) 22:07:21
んなわきゃーない

717 :704:2006/08/04(金) 22:29:44
皆さんレスありがとうございます。

>>709
確かに。ただ、DLL側から呼びたい本体側のサブルーチンの数が多いのと、
Unixでは関数ポインタを使う必要がないので、より簡単な方法があれば
知りたいと考えました。

>>711
本体側のサブルーチンにエクスポート宣言を入れることは可能です。

しかし、得られるものが関数ポインタということは、やはりDLL側での
本体のサブルーチンの普通の関数呼出しの形では呼べないということですね。

どうやらDLL周りの設計をUnix版から大きく変えないといけないみたいです。
お騒がせしました。ありがとうございました。

718 :704:2006/08/04(金) 22:31:57
「DLL側では本体のサブルーチンを普通の関数呼出しの形で呼ぶことはできない」の誤りでした。

719 :デフォルトの名無しさん:2006/08/04(金) 23:09:34
確かexeからエクスポートすることもできたはずだが
HSPなんかが使ってたような

720 :デフォルトの名無しさん:2006/08/04(金) 23:40:45
出来るよ。
DLLもEXEも大雑把に言えば、エントリポイントが違うだけで、同じモジュールなんだし。


721 :デフォルトの名無しさん:2006/08/04(金) 23:42:31
Unixでは関数ポインタを使わなくてすむと言うのは、一体どういうことなのか気になる。

722 :デフォルトの名無しさん:2006/08/05(土) 00:18:12
Windowsで言うなら
「exeからエクスポートした関数にインポートライブラリでDLLからリンクする」
みたいなことだと勝手にエスパーして>>719を書いてみたわけだが

723 :デフォルトの名無しさん:2006/08/05(土) 08:40:06
OllyDbgでもプラグイン用に使ってるよ>Export

724 :704:2006/08/05(土) 10:06:15
内容:
>>719-720
ありがとうございます。「インポートライブラリ」という概念が分かっていませんでした。
本体側の関数をエクスポートしてインポートライブラリを作り、
プラグインの構築時にリンクすることで普通の関数呼び出しの形で呼び出せました。
試作したプログラムを添付してまとめに代えます。本当にありがとうございました。

/* 本体:gcc -o test1 test1.c -Wl,--out-implib,callback.a */
#include <windows.h>
#include <stdio.h>
const char *dlerror(void) {
static char last_error[1024];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), last_error, sizeof(last_error) / sizeof(char), NULL);
return last_error;
}
typedef int (*plugin_func_t)(int, int);
static int *x;
int main(int argc, char *argv[]){
HINSTANCE handle;
plugin_func_t func;
int a = 1, b = 2;
handle = LoadLibrary("foo.dll");
if (!handle) { printf("LoadLibrary: %s", dlerror()); return -1; }
func = (plugin_func_t)GetProcAddress(handle, "plugin_func");
if (!func) { printf("GetProcAddress: %s", dlerror()); return -1; }
x = (int *)malloc(sizeof(int));
printf("plugin_func(%d, %d) => %d\nx = %d\n", a, b, (*func)(a, b), *x);
return FreeLibrary(handle);
}

725 :704(:2006/08/05(土) 10:07:32
__declspec(dllexport) int /* __stdcall */ callback_func(int a, int b) {
printf("callback_func: a = %d, b = %d\n", a, b);
*x = a + b;
return *x;
}

/* プラグイン:gcc -shared -Wl,--kill-at -o foo.dll foo.c callback.a */
__declspec(dllimport) int /* __stdcall */ callback_func(int, int);
__declspec(dllexport) int /* __stdcall */ plugin_func(int a, int b) {
printf("plugin_func: a = %d, b = %d\n", a, b);
return callback_func(a, b);
}

726 :デフォルトの名無しさん:2006/08/05(土) 10:17:07
if (!GetMessageW(&msg, hWnd, 0, 0))

どうしてこのコードでWM_QUITか調べられるですか?

727 :デフォルトの名無しさん:2006/08/05(土) 10:22:54
>>726
それはWM_QUITかどうかを判定してるわけじゃない。
GetMessageの説明をちゃんと読みましょう。

728 :デフォルトの名無しさん:2006/08/05(土) 10:23:37
WM_QUITの値って0なのか?
分かりにくいからQUITで判定した方がいいと思うが

729 :デフォルトの名無しさん:2006/08/05(土) 10:27:47
WM_QUIT メッセージを取得した場合、0 が返ります。

730 :デフォルトの名無しさん:2006/08/05(土) 10:29:51
なるほど

731 :デフォルトの名無しさん:2006/08/05(土) 11:59:15
>>726
そこhWndを引数にする必要はあるか?

732 :デフォルトの名無しさん:2006/08/05(土) 12:03:00
SetWindowPosの解説に
「ウィンドウを最前面ウィンドウにするには、hWndInsertAfterパラメータで、
HWND_TOPMOSTフラグをセットしたうえでSWP_NOZORDERフラグをクリアするか…」
とあるんですが、SWP_NOZORDERフラグってどうやってクリアするんですか?

733 :デフォルトの名無しさん:2006/08/05(土) 12:10:12
>>732
普通にSWP_SHOWWINDOW入れてSetForegroundWindowすればいいんじゃね

734 :732:2006/08/05(土) 12:26:06
>>733
他のウインドウで作業してる時に、
別のウインドウを非アクティブのまま操作したいんです。

735 :デフォルトの名無しさん:2006/08/05(土) 14:07:07
それはSetWindowPosとなんか関係があるのか?

736 :デフォルトの名無しさん:2006/08/05(土) 14:09:54
エスパーじゃないからどういう状況でどんな操作がしたいのかよくわからん

737 :デフォルトの名無しさん:2006/08/05(土) 16:14:47
フラグの操作も知らんで今までよくやってこれたな

738 :デフォルトの名無しさん:2006/08/05(土) 16:26:51
どうせネトゲのツールだろ

739 :デフォルトの名無しさん:2006/08/05(土) 16:38:20
#include <wincrypt.h>

してるのにその中で定義されてる

HCRYPTPROV

とかが未定義エラーになるのですが
どうすれば良いのでしょうか?

740 :デフォルトの名無しさん:2006/08/05(土) 16:44:09
wincrypt.hの中にif文みたいなのがあるだろ

741 :732:2006/08/05(土) 19:54:51
>>735-738
マウスを使わずにキーボードで非アクティブなウインドウを、
常に手前表示、解除して後ろに表示と切り替えたいんです。
プログラム作るの初めてなんでとっかかりでも教えてもらえると嬉しい。

742 :デフォルトの名無しさん:2006/08/05(土) 20:10:02
なんでプログラム作るの初めての人がこんなところにいるんだか…
とりあえず↓嫁

猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/

743 :tttttった:2006/08/05(土) 20:47:00
J#でAPIどうやって使うの?
MIDIならしたいんだけど、VB.net ならわかるんだけど
J#は 書き方がわからない。

744 :732:2006/08/05(土) 21:03:35
>>742
意地悪せずに教えて欲しいのです。ググりまくってここまでできたんですが、
repeat
p1_p = p1
getkey p1,120
if (p1=1) & (p1_p=0){ if a=0 {SetWindowPos hwndact,-1,0,0,0,0,1 or 2 or 16
a=1 }
else {SetWindowPos hwndact,-2,0,0,0,0,1 or 2 or 16
SetWindowPos hwndact,1,0,0,0,0,1 or 2 or 16
a=0}}
wait 2
loop
操作するウインドウがアクティブになってないと反応しません。
メモ帳のウインドウだと非アクティブでも反応するんですが…
ちなみにプログラム言語はHSPです。

745 :デフォルトの名無しさん:2006/08/05(土) 21:10:15
>>743
J/Directでぐぐれ

746 :デフォルトの名無しさん:2006/08/05(土) 21:45:58
>>744
>意地悪
( ゚Д゚) ポカーン

747 :tttttった:2006/08/05(土) 22:03:11
ぐぐったんだが わからんのだ。
J#のことがかかれてるいいHPないかな?

748 :デフォルトの名無しさん:2006/08/05(土) 22:59:00
>>732
その質問はスレ違い。
ビット反転してAND取ればいいんだが、正直それが分からないレベルで
このスレに来られても非常に困る。

749 :デフォルトの名無しさん:2006/08/06(日) 00:03:40
ビット反転してAND取るとオールクリアされちゃうんじゃw
でもなんにしても>>732はスレ違いだな。

750 :デフォルトの名無しさん:2006/08/06(日) 00:04:51
>>749
されません

751 :デフォルトの名無しさん:2006/08/06(日) 00:08:05
>>749
カスはすっこんでろ

752 :デフォルトの名無しさん:2006/08/06(日) 00:09:58
>>744
こういう輩がHSPの評判をさげていくんだろうね。
俺の中では、既にHSPは厨房専用言語的な地位を占めているワケだけど。

753 :デフォルトの名無しさん:2006/08/06(日) 00:22:32
>>750-751
オマエラこういう時だけ反応速いなwww

754 :デフォルトの名無しさん:2006/08/06(日) 00:27:17
問題はすぐには分からないが、誰がカスかはすぐに分かるからなw

755 :749:2006/08/06(日) 00:34:18
てっきり意地悪して今あるフラグをビット反転するように
言ってるのかと思ったんだよ、カスで悪かったなw

756 :デフォルトの名無しさん:2006/08/06(日) 00:40:08
どっちにしろカスだけどな

757 :デフォルトの名無しさん:2006/08/06(日) 02:42:30
BeginPaint と EndPaintについて質問があります
WM_PAINTが来たときなどで

BeginPaint()
(文字列の描画処理)
EndPaint()

これだと上手く動くのですが

BeginPaint()
(文字列の一回目の描画処理)
EndPaint()
BeginPaint()
(文字列の二回目描画処理)
EndPaint()
にしたら二回目が描画されません。BeginPaintとEndPaintは一回しか使用してはいけないのでしょうか?
よろしくお願いします。





758 :デフォルトの名無しさん:2006/08/06(日) 02:47:55
>>757
そうだよ。

759 :デフォルトの名無しさん:2006/08/06(日) 02:53:54
もっと言うと
「使用しなくても良い」
が正解

760 :デフォルトの名無しさん:2006/08/06(日) 09:29:41
おれ毎日かかさず使ってたのに

761 :デフォルトの名無しさん:2006/08/06(日) 09:39:31
MSDNのCB_ADDSTRINGメッセージでの返却値の説明に
If insufficient space is available to store the new string, it is CB_ERRSPACE.
とあるのですが、このinsufficient space(不十分な空白?)とは
何を指しているのでしょうか?

762 :デフォルトの名無しさん:2006/08/06(日) 09:48:00
「バッファのサイズが不十分だった場合」

763 :761:2006/08/06(日) 09:49:55
>>762
ありがとうございます。
CB_ERRSPACEをググったら一番上に出てましたorz

764 :757:2006/08/06(日) 16:10:31
>>758 >>759
ありがとうございました。すっきりしました

765 :デフォルトの名無しさん:2006/08/07(月) 10:50:05
>>759
Validate??? を明示的に呼び出さないと、
不必要な WM_PAINT が、がんがんやって来るんじゃまいか?

766 :デフォルトの名無しさん:2006/08/07(月) 13:11:11
実際のウィンドウのタイトル(左上に表示されているもの)と
タスクバーに表示されているタイトルが違うアプリケーションがあるのですが
あれはどのように実現しているのでしょうか?

767 :デフォルトの名無しさん:2006/08/07(月) 14:42:00
>>766
ウィンドウを2つ作ってる。

768 :デフォルトの名無しさん:2006/08/07(月) 15:40:57
>>767
ありがとうございました
なんとか実現できそうな感じです

769 :デフォルトの名無しさん:2006/08/07(月) 22:27:45
>>743

Managed DirectX

770 :デフォルトの名無しさん:2006/08/09(水) 11:35:48
リストビューに1000個アイテムを追加する時
描画が遅い感じがします。
追加した後に描画したいのですが可能でしょうか?


771 :デフォルトの名無しさん:2006/08/09(水) 11:50:47
可能

772 :デフォルトの名無しさん:2006/08/09(水) 12:16:39
仮想リストビューでぐぐれ

773 :デフォルトの名無しさん:2006/08/09(水) 12:25:17
>>771
どうやるのでしょうか?
>>772
調べてみます


774 :デフォルトの名無しさん:2006/08/09(水) 12:56:03
教えんよw

775 :デフォルトの名無しさん:2006/08/09(水) 13:25:29
>>770
TListItems.BeginUpdate() / TListItems.EndUpdate()

776 :デフォルトの名無しさん:2006/08/09(水) 14:43:35
>>770
最新のMSDN(英語版)を見ると、CallNextHookExの第1引数はNULLを渡せばいいことになってる。
だから、g_hHookWnd_gmを共用にしなくてもいいかも。

777 :デフォルトの名無しさん:2006/08/09(水) 14:52:35
>>775
???w

>776
???w



778 :デフォルトの名無しさん:2006/08/09(水) 14:52:43
>>774
この手の馬鹿って、何を考えて生きてるんだろうね。

779 :デフォルトの名無しさん:2006/08/09(水) 15:07:00
>>770
WM_SETREDRAW

780 :デフォルトの名無しさん:2006/08/09(水) 15:07:09
>>770
WM_SETREDRAW

781 :デフォルトの名無しさん:2006/08/09(水) 15:07:56
お前は俺か

782 :デフォルトの名無しさん:2006/08/09(水) 15:23:02
>>770
WM_SETREDRAW

783 :デフォルトの名無しさん:2006/08/09(水) 15:23:40
>>770
WM_SETREDRAW

784 :デフォルトの名無しさん:2006/08/09(水) 15:24:34
お前は俺か

785 :デフォルトの名無しさん:2006/08/09(水) 15:26:50
>>770
WM_SETREDRAW

786 :デフォルトの名無しさん:2006/08/09(水) 15:28:37
>>770
WM_SETREDRAW

787 :デフォルトの名無しさん:2006/08/09(水) 15:35:31
俺、俺だよ俺

788 :デフォルトの名無しさん:2006/08/09(水) 18:17:57
自分のPCが共有している共有フォルダのローカルパスを知る方法がわからないので教えてください。

たとえば、\\local\hoge というUNCから c:\hage という共有元のフォルダ名を知りたいということです。


789 :デフォルトの名無しさん:2006/08/09(水) 18:23:23
プログラムの2重起動禁止
で最も効率のいい方法って何かありますか?

方法は幾らかあると思うんですが、ここのスレに居る人のやり方を聞きたいです

790 :デフォルトの名無しさん:2006/08/09(水) 18:27:00
>>789
mutex

791 :デフォルトの名無しさん:2006/08/09(水) 18:27:13
起動するときにチェックするだけなんだから効率とかどうでもいい気もするが
mutex

792 :デフォルトの名無しさん:2006/08/09(水) 18:29:18
>>789
mutexがいいんじゃないかな。

793 :792:2006/08/09(水) 18:29:59
orz

794 :デフォルトの名無しさん:2006/08/09(水) 18:31:50
mutexばっかりか、ツマンネ

じゃあ条件追加
重複時は先に起動してた方のウィンドウにフォーカスを合わせたいです

795 :デフォルトの名無しさん:2006/08/09(水) 18:32:52
>>794
ググれ、カス

796 :デフォルトの名無しさん:2006/08/09(水) 18:39:21
>>795
ググってもでてこないような裏技的な方法で頼む

797 :デフォルトの名無しさん:2006/08/09(水) 18:41:03
>>796
氏ね

798 :デフォルトの名無しさん:2006/08/09(水) 18:42:09
HCBT_CREATEWNDをフックして殺す

799 :デフォルトの名無しさん:2006/08/09(水) 18:45:04
MessageBox(NULL,
        _T("多重起動なら、先に起動した方のウィンドウにフォーカスを合わせてください"),
        _T("多重起動チェック"),
        MB_OK);

800 :デフォルトの名無しさん:2006/08/09(水) 18:48:34
>>789
何かのファイルを排他で開く。

801 :デフォルトの名無しさん:2006/08/09(水) 18:48:37
MutexとFindWindowを使う方法
Mutexとレジストリを使う方法
Mutexを使わないでファイルマッピングを使う方法
Windowsじゃなくて自分しか立ち上がらないようにして再起動する方法 (Win95時代のCD焼きソフトにこんなのがあった。)

というわけで788もよろしくです。

802 :デフォルトの名無しさん:2006/08/09(水) 18:51:45
・最強
・超
・裏技
・絶対

803 :デフォルトの名無しさん:2006/08/09(水) 18:54:50
・最強のアプリケーションが作りたいです!!!
・超簡単に作りたいので、
・裏技を教えてください!!!
・絶対ありますよね!

804 :デフォルトの名無しさん:2006/08/09(水) 18:56:21
>>788
net share 相当のことをAPIでやるってことですよね。
なんとなくWNetOpenEnum と WnetEnumResource で列挙すれば
良いような気がする。


805 :デフォルトの名無しさん:2006/08/09(水) 18:59:16
>>794
ファイルマッピングにハンドルつっこんどけば?

806 :デフォルトの名無しさん:2006/08/09(水) 19:52:41
>>多重起動防止

オレは、ウィンドウクラス名にユニークなものを付けて、起動時にFindWindowで
チェック、見つけたら起動中止&見つけたウィンドウをアクティブにしてる。

(ウィンドウができないくらい)超短時間で二重起動されたらダメだが・・・・・


807 :デフォルトの名無しさん:2006/08/09(水) 19:58:06
>>806
> 超短時間で二重起動
そんな感じで、二重起動できないソフトを二重起動させてしまったことがある。
スタートアップ中に待ちきれなくて、2度もそのソフトをスタートメニューから呼んだらそうなった。

808 :デフォルトの名無しさん:2006/08/09(水) 20:06:00
>>807
ウィルス対策ソフトでリアルタイムスキャンなんかしてると頻発する

809 :デフォルトの名無しさん:2006/08/09(水) 20:06:54
ウィルス対策ソフトを同時起動させれば効果2倍ですね!

810 :デフォルトの名無しさん:2006/08/09(水) 20:07:24
いや、頻発するような二重起動チェックするなよw

811 :デフォルトの名無しさん:2006/08/09(水) 20:13:57
ごもっとも

812 :デフォルトの名無しさん:2006/08/09(水) 20:37:26
普通にMutexでいいじゃん

813 :デフォルトの名無しさん:2006/08/09(水) 21:18:19
そういえばWin32Tipsサイトってみんな二重起動チェックあるけど
飽きないのかなあ

814 :デフォルトの名無しさん:2006/08/09(水) 22:10:28
1バイトからメモリやOSが許す限界まで(可能なら4G↑)
動的にメモリの確保を行いたいんですが
mallocやrealloc(重要)みたいなAPIはないですか?
ヘルプ見る限り上記の仕様だとヒープ領域はよろしくないと感じたので
どなたか知っていたら教えてください。

815 :デフォルトの名無しさん:2006/08/09(水) 22:11:17
VirtualAllocはいかが?

816 :デフォルトの名無しさん:2006/08/09(水) 22:17:01
>>815
ありがとうございます。ちなみにreallocに近い動作は出来るのでしょうか?

817 :デフォルトの名無しさん:2006/08/09(水) 22:46:46
>>816
ヒープ管理がほしかったら、
そのまんまの名前、HeapCreate()からHeapAlloc(), HeapReAlloc()などがまさにそれ。

818 :デフォルトの名無しさん:2006/08/09(水) 22:47:19
>>807
タスクマネージャが二重起動したことがある。

819 :デフォルトの名無しさん:2006/08/09(水) 23:03:36
           .,Å、
         .r-‐i'''''''''''i''''‐-、
        o| o! .o  i o !o
       .|\__|`‐´`‐/|__/|
        |_, ─''''''''''''─ ,、 / _
      /             \    
     /  /              ヽ
     |     ●   ⌒)   ●  |    
     !         、__)       ノ
     丶_               ノ
/´ ヽ` ̄        ー-゙:.、 おっぱい吸ってね
     i          - 、         `ヽ_
     l:    、.:         ヽ       ゙i"
       !    i ; n  .:c.:   ',    _..ハ
      |    ハ/ {   _,..-ァノ 、r‐、>ー ヽ
     |   ト./  ` ̄__,.:=彡  :.ヾ、ニ二 /
.       |    |ノ     -=<      ゙=tラ'"
        |   /   ,-一'" ̄´         i
       |:/     / \:.           !
      | '    /   ヽ:.         :、  \
        ゙、  ノ    .i:.        `   ヽ
       `ー'    _:/__:.            `ー---─ ''"´ ̄ ̄`` ー- 、
          /´    `ヽ、.         .:                   `ヽ、
           /             `ヽ、                          ゙i
            i    まんこも なめてね       :;                    ,!
           !       ‐-、      :. ;: .:'                      /
         ヽ        ヽ     ; j:! "       __..:-‐'"´ ̄ ̄`   __ノ
             \         !    .:' 〃 ,..:---─‐'"´ __.. -──── ''"´
            `ヽ、     ヽ、 ノ-く⌒ヾ:.:'ー--ァ'"´
                  `ヽ、   >:)..( );;;;;;}:/` ̄i

820 :デフォルトの名無しさん:2006/08/09(水) 23:14:24
>>816
もちろんできる。
VirtualAllocの最初の引数かどこかに、割り当てたい位置へのポインタを指定するという引数があるだろ。

821 :デフォルトの名無しさん:2006/08/09(水) 23:40:08
>>820
realloc()とは違うだろそれは。
ページサイズ単位でしか確保できないぞ。
realloc()と同じ用途で使うには不向き。
メモリをOSから「確保」するのは遅いし。

822 :デフォルトの名無しさん:2006/08/10(木) 02:29:12
実行されるアプリケーションの情報を集めたいのですが、
可能でしょうか?
何かのアプリケーションが実行されるたびにメッセージが送られてくる
みたいなAPIはないでしょうか?

823 :デフォルトの名無しさん:2006/08/10(木) 09:10:06
SetCursorPos API でカーソルを移動するとそのウィンドウに
WM_MOUSEMOVE メッセージが飛んできますが、
それを飛んでこないようにカーソルを移動できないでしょうか。

諸事情により、"マウスで"移動した場合の処理をしたいのです。

824 :デフォルトの名無しさん:2006/08/10(木) 09:57:05
>>822
デバドラなら可能。
プロセス・スレッド起動時、プロセス・スレッド終了時
それぞれのイベントをトレース可能。

825 :デフォルトの名無しさん:2006/08/10(木) 11:06:13
>>822
CreateProcessにグローバルフック掛ければ?

定期的にポーリングするのでよければ、CreateToolhelp32Snapshot()が簡単


826 :デフォルトの名無しさん:2006/08/10(木) 11:37:48
APIフックとグローバルフックの違いを分かってて言ってるんだろうか

827 :デフォルトの名無しさん:2006/08/10(木) 13:40:12
SendInputで渡した個々のINPUTのイベントを任意の間隔(ms)で
実行する方法ってある?
物凄いスピードで実行されるんでちょっと困ってる。
ki.timeとかmi.timeとか使えるかと思ったら全然関係ない見たい出汁

828 :デフォルトの名無しさん:2006/08/10(木) 13:51:29
>>827
任意の間隔でSendInputすればいいじゃん

829 :デフォルトの名無しさん:2006/08/10(木) 14:10:48
いや、他のイベントに干渉されずに一連の動作をしたいんだ。
せっかくまとめて送信できるのに1個ずつに分けるのも面倒だし・・・

830 :デフォルトの名無しさん:2006/08/10(木) 14:13:51 ?2BP(200)
SendInputをラッピングして、イベントを分割してSendInputしてくれるシーケンサースレッドを
作ってそれに渡す。

831 :デフォルトの名無しさん:2006/08/10(木) 14:24:52
他のイベントに干渉されないようにSendInputを使うなら、
イベントを個別に分割すると意味が無いような。

832 :デフォルトの名無しさん:2006/08/10(木) 16:24:36
wsprintfってbufferが1024バイト限界って書いてますが、

char buffer[3000]="";
wsprintf(buffer,"a='%s',b='%s',c='%s'.........",a,b,c,d.......);
と70個くらい文字列を渡してSQL文を作ろうとしてるのですが、
どうもwsprintfのせいでうまくいきません。
同じように使える 代わりに使う関数のお勧めありますか?


833 :デフォルトの名無しさん:2006/08/10(木) 16:30:10
>>829
任意の間隔舞っている間に、
他のプロセス、もしくはユーザが入力をするというのは考えられんのか。
あるいは、いかなる方法をもってしてもそんなことはさせたくないのか……。



スレッドの優先度をリアルタイムにs(ry

834 :デフォルトの名無しさん:2006/08/10(木) 17:10:25
>>832
sprintf, std::stringstream, boost::format

835 :デフォルトの名無しさん:2006/08/10(木) 17:15:01
普通に文字列連結させればいいんじゃ・・・

836 :デフォルトの名無しさん:2006/08/10(木) 17:30:14
>>823
意味がわからん

マウスで移動した場合の処理がしたいならWM_MOUSEMOVEいるじゃねぇかとおもうのはおれだけか

837 :823:2006/08/10(木) 17:50:57
>>836
マウスで移動した場合は処理したいけど、
プログラム側で移動した場合は処理したくない。

だから SetCursorPos API で WM_MOUSEMOVE が発生するのはマズーなのです。
なんかいい方法ないでしょうか...

838 :デフォルトの名無しさん:2006/08/10(木) 18:09:02
プログラム側で移動させるんならフラグでも立てて処理させなきゃいいじゃん

839 :デフォルトの名無しさん:2006/08/10(木) 20:51:17

リストビューで
ツールチップを表示している上(表示していない場合もあり)からダブルクリックした場合に
ブラウザを起動する処理なのですが
うまくメッセージが取れません。
ツールチップがある時はトリプルクリックで成功します。
そこで次のように書きました

case WM_LBUTTONDOWN:
EraseListViewTips();
return CallWindowProc(original_procedure, hWnd, message, wParam, lParam);

case WM_LBUTTONDBLCLK:
MessageBox(hWnd, "ダブルクリック", "debug", 0);

EraseListViewTips()はツールチップを消す関数です。
これで成功するのですが一般的にはどうするのでしょうか?
欲を言うとツールチップを消さずにメッセージを取りたいのです




840 :デフォルトの名無しさん:2006/08/10(木) 22:58:11
>>832

char buffer[0x8000];


buffer[0] = '\0';

//条件
if (略){
::lstrcat(buffer, "SELECT DB.A ");
}else
 :

などなど

841 :デフォルトの名無しさん:2006/08/10(木) 23:03:10
TextOutで文字列を描画したときの
各文字の正確な位置や幅を知る方法は無いでしょうか?
GetTextExtentPoint32やGetCharABCWidthsを使うと
MSゴシックではいいのですがCourier Newにするとずれてしまいます。

842 :デフォルトの名無しさん:2006/08/10(木) 23:05:35
DrawText() の DT_CALCRECT でも駄目?

843 :841:2006/08/11(金) 01:09:45
自宅のWin2kで実行したところ、文字列自体がうまく表示できませんでした。
文字列に記号が混ざっており、会社のWinXPだとCourier Newでも
うまく出たんですが、Win2kだと□になりました。
□になった状態だとGetTextExtentPoint32やDrawTextでうまくいきました。
(文字列:L"Δ∇Δ∇" WinXPで描画:Δ∇Δ∇ Win2kで描画:Δ□Δ□)

XPのとき、フォントに含まれない文字も描画されるのはなぜなんでしょうか?
そのときの表示幅を得るにはどうすればいいのでしょうか?

844 :デフォルトの名無しさん:2006/08/11(金) 01:21:35
>>843
たぶんXPでうまく表示されるのは、フォントリンクが働いているためだと思う。
ちなみに2000でもフォントリンクは使える。
ただXPよりデフォルトで指定されているリンクの数は少なかったはず。

845 :デフォルトの名無しさん:2006/08/11(金) 11:36:37
質問です。
自前でリストビューでツールチップを表示させているのですが
自動でできないのでしょうか?


846 :デフォルトの名無しさん:2006/08/11(金) 11:42:14
できるよ
クリエイトウィンドウの時に(ry


847 :デフォルトの名無しさん:2006/08/11(金) 13:16:13
>>841
文字列の一部を枠で囲ったりマウスでのヒットテストをするために
各文字の位置を知りたいのなら GetTextExtentExPoint を使う。
指定した幅に収まる文字数も返してくれるので、
矩形内で折り返したりするものは自力で1行ずつ処理。

848 :デフォルトの名無しさん:2006/08/11(金) 14:09:59

javaで作られたソフトのリストボックの各項目の左側(12mm?) の位置をクリック
したいのです。

javaはリストボックスなどを自前で描画しているとの事です。(listview to CVS より)

調べたらWM_LBUTTONDOWNメッセージを送ればいいとの事ですがそれには
座標の計算?が必要だそうです。

質問はWinAPIで
リストボックスの項目の数を取得
各項目の位置(座標)を取得
メッセージを送信

これはWinAPIで可能でしょうか?




849 :デフォルトの名無しさん:2006/08/11(金) 14:57:06
>>848
SWT (Java のアプリで Win32 の各種コントロールを用いている)なら
多少のハックでできると思うけど、
PureJava だとかなりのハックをしないと出来ないんじゃないかな。

850 :デフォルトの名無しさん:2006/08/11(金) 15:04:57
API の話ではないのですが、abc.dll の名前を xyz.dll に変えたい場合、
abc.lib をどのように編集して xyz.lib を作ればよいでしょうか。
abc.dll のソースは入手できないものとします。


851 :デフォルトの名無しさん:2006/08/11(金) 15:39:22
>>850
abc.libをバイナリエディタで開いてabcと書かれているところをxyzに変更。

852 :デフォルトの名無しさん:2006/08/11(金) 15:40:18
>>851
xyzuvw.dll に変更したかったら?

853 :デフォルトの名無しさん:2006/08/11(金) 16:17:11
pexports, dlltool でインポートライブラリ作成できる

854 :845:2006/08/11(金) 17:17:36
>>846
自動 ツールチップ リストビュー
で検索しても見つかりません。

教えていただけませんでしょうか?



855 :788:2006/08/11(金) 17:25:01
>自分のPCが共有している共有フォルダのローカルパスを知る方法がわからないので教えてください。

NetShareGetInfo でいけますた。
参考URL:ttp://www.hey-to.net/ML-archive/vcppML/1999/msg03058.html

>>804様、Thx

856 :デフォルトの名無しさん:2006/08/11(金) 18:09:31
>>839
TTM_SETTOOLINFOでTTF_TRANSPARENT 指定しているのに、
ダブルクリックが阻害されるという話ですか?

857 :デフォルトの名無しさん:2006/08/11(金) 19:36:47
WH_KEYBOARDをグローバルフックしてると、SendInput()でキーストロークを
送信しても最初のイベントしか実行されないんだが何でだろう?
フックを外すとSendInput()に渡したイベント全部実行されるんだけどフック
してるとダメポ。
フックハンドラ内でCallNextHookEx()もしてるんだけど、どうしてもうまく行かない。

誰か知ってたら教えてください。お願いします。

858 :デフォルトの名無しさん:2006/08/11(金) 20:18:02
>>857
フックハンドラが間違ってるんじゃない?
ソース晒さないと、それ以上はわからん

859 :デフォルトの名無しさん:2006/08/11(金) 21:24:27
なんつうか最近入力をフックしたい人が多いねぇ
夏休みの宿題でキーロガー作れとかあるんだろうか

860 :デフォルトの名無しさん:2006/08/11(金) 21:51:33
フック自体は働いてる(キーも取れるし他のアプリの邪魔もしない)し
keybd_event()やデータが1個しかないSendInput()だと同時に動くんだけど
と思ったら、フック外してもダメだ。
MOUSE_INPUTはフック無しで動いたから大丈夫と思ってたけど自分のミスっぽい。
ごめん自分で調べてみます。

>>859
自分のはそんな怪しいものでは無いです。
勉強がてら、ちょこちょこと手動操作の自動化をして自己満足に浸ってるだけw

861 :デフォルトの名無しさん:2006/08/12(土) 00:42:36
俺も最近フックに興味もって色々調べだした
腕試しにネトゲの多重起動を実行ファイルをバイナリィエディタで弄らずに成功させる方法として
APIファックを使おうと考えたわけだが…・
CreateMutexはまさにexeがメモリにマッピングされた瞬間くらいから呼ばれるわけで…
まだ起動していないプロセスにどうやって寄生虫をファックさせるのかという壁にぶちあたった('A`)


862 :デフォルトの名無しさん:2006/08/12(土) 00:47:11
>>861
CREATE_SUSPENDED API Hook でググれ。


863 :デフォルトの名無しさん:2006/08/12(土) 15:17:42
他プロセスの「画像の保存ダイアログ」の
元ファイルのパスを取得するにはどうすればいいのでしょうか?

864 :デフォルトの名無しさん:2006/08/12(土) 17:20:42
>>861
黙れ貴様コンパイルするぞ?

865 :864:2006/08/12(土) 17:21:32
間違えた
>>861×
>>863

866 :デフォルトの名無しさん:2006/08/12(土) 17:52:04
いいから俺のちんこを最適化しろ

867 :デフォルトの名無しさん:2006/08/12(土) 17:55:59
そのまえにデバッグしろ

868 :デフォルトの名無しさん:2006/08/12(土) 18:06:44
よくある設定ダイアログで、
左のツリービューにカテゴリーがあって、
右側に各種項目が表示されるタイプのがありますが、
あれって、右側はどういうコントロールを使っているんでしょう?

869 :デフォルトの名無しさん:2006/08/12(土) 18:14:06
よくあると言われてもどれの事やらよく判らん

870 :デフォルトの名無しさん:2006/08/12(土) 18:17:02
>>864-866
不覚にもワロタ

871 :デフォルトの名無しさん:2006/08/12(土) 18:30:39
>>868
tweak UIでもspy++で見てみればいいじゃん

872 :デフォルトの名無しさん:2006/08/12(土) 18:55:14
>>868
チャイルド属性つきのダイアログ
それを左側の選択で、各項目毎のに張り替える

873 :845:2006/08/13(日) 14:39:54
どなたか教えていただけませんか
>>854

874 :デフォルトの名無しさん:2006/08/13(日) 14:45:30
>>873
猫に書いてるだろ

875 :845:2006/08/13(日) 15:14:42
ツリービューは書いてますけどリストビューは書いてません

876 :デフォルトの名無しさん:2006/08/13(日) 15:44:14
可能な限り調べました?

877 :デフォルトの名無しさん:2006/08/13(日) 16:20:34
>>845=873
そもそも、質問が曖昧。

リストビューのコントロールにたいして「りすとびゅー」てなツールチップを表示したいのか、
表示されているリストビューアイテム一つ一つに対して「あいてむ1」という感じにツールチップの内容を変えないと行けないのか、
はたまた、ぜんぜん違う事を考えているのか、

おまいさんの質問からは読み取れない。

878 :845:2006/08/13(日) 16:37:50
チンカスは黙ってろ

分かる方だけ返答をお願いします

879 :チンカス:2006/08/13(日) 17:44:30



880 :デフォルトの名無しさん:2006/08/13(日) 17:55:26
これは醜い

881 :デフォルトの名無しさん:2006/08/13(日) 18:29:15
>>878
既に2日経ってるのに
ここで返答が返ってこない限り何もしない気なの?

882 :デフォルトの名無しさん:2006/08/13(日) 18:30:30
偽物にマジレスするのが流行ってるの?

883 :デフォルトの名無しさん:2006/08/13(日) 18:32:34
>>881
もう、放っとこうよ。


884 :845:2006/08/14(月) 08:34:02
>>878は偽者です。

FFFTPのソースを見ましたけど独自に描画しているのです。
ツリービューは横スクロールバーが付くときは
自動でツールチップが表示されますよね?

そういうのがリストビューには無いのですか?


885 :デフォルトの名無しさん:2006/08/14(月) 08:53:15
>>884
過去レス見ずに一言。
リストビューはセルの幅が足りないときにはツールチップが出ますがそれのことではない?

こんな感じ

┼────┼
│ 幅の足...│
┼────┼



┼┌────────┐
││ 幅の足りないセル│
┼└────────┘
 
 
 


886 :デフォルトの名無しさん:2006/08/14(月) 09:59:42
WinXPでタスクバーでグループ化されたときのタスクバーボタンのキャプション設定方法しりませんか?
SDKのタスクバー項を眺めてもそれらしい情報無しです。
Officeとかは設定できているみたいです。
設定しないと、exeの名称になっとる。

887 :デフォルトの名無しさん:2006/08/14(月) 10:38:12
バージョン情報リソースの説明だと思われ
つまり動的に設定はできない。

888 :デフォルトの名無しさん:2006/08/14(月) 11:04:59
>>887
レスありがとう。ためしてみたけど、できるやつとできないやつがあります。

VC6, VB6で作ったexe → exe名が表示される
あと、manifest情報も、リソースで設定したり、manifestファイルで設定してみたけど、
exe名が表示されてしまいました。

889 :デフォルトの名無しさん:2006/08/14(月) 11:19:47
>>885
それを出すのになにかスタイルが必要じゃないですか?
普通にやってもでないのですが?

890 :デフォルトの名無しさん:2006/08/14(月) 11:45:03
>>889
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/ex_styles.asp

891 :デフォルトの名無しさん:2006/08/14(月) 12:25:56
>>890
それ使えないよw

892 :デフォルトの名無しさん:2006/08/14(月) 12:56:50
使えないとは?英語読めないの?

893 :デフォルトの名無しさん:2006/08/14(月) 14:44:52
非常にものぐさな意見で申し訳ないんだが、事前に要約してくれた
情報があると英文も読み易くなるので嬉しいかも。

894 :891:2006/08/14(月) 15:07:38
間違えたスマン
英語は読めんけど LABELね
TOOLで検索してたw


895 :デフォルトの名無しさん:2006/08/14(月) 19:40:48
>845
無い。自分で実装汁。もうしてるみたいだけど。

896 :デフォルトの名無しさん:2006/08/15(火) 11:32:07
>>895
>>890


897 :デフォルトの名無しさん:2006/08/15(火) 18:12:54
アプリを実行したユーザが誰かわかる方法ってありますか?
UNIXでいえばgetuidみたいな奴

898 :デフォルトの名無しさん:2006/08/15(火) 18:14:11
あるよ

899 :897:2006/08/15(火) 18:17:20
>>898
本当ですか?
できればメソッド名を教えていただきたいのですが。
だめ?

900 :デフォルトの名無しさん:2006/08/15(火) 18:24:27
だめ

901 :デフォルトの名無しさん:2006/08/15(火) 18:34:10
まずググレカス

902 :デフォルトの名無しさん:2006/08/15(火) 19:34:50
>>901
知らないなら知らないっていえよw

903 :デフォルトの名無しさん:2006/08/15(火) 19:37:09
知らなかったからググったら腐る程出てきたんだっつの

904 :デフォルトの名無しさん:2006/08/15(火) 19:40:13
キーワード教えてよ〜

905 :デフォルトの名無しさん:2006/08/15(火) 19:41:07
教えてよ〜

906 :デフォルトの名無しさん:2006/08/15(火) 19:42:07
ググルがよい

907 :デフォルトの名無しさん:2006/08/15(火) 19:46:09
教えてくれなきゃ何もできないよ〜

908 :904:2006/08/15(火) 19:59:05
>>897
OpenProcessTokenを使うらしいよ〜。
まあAPI一個じゃできませんな。
ttp://forums.belution.com/ja/vc/000/165/29.shtml
たまたま以前にシャットダウン特権取得する
処理書いてたからそんなのあったかなーと探してみた。
特権とか知らないとぐぐっても引っかからない気がするけどね。

>901や>903はどうやってぐぐったんだろう。

909 :901:2006/08/15(火) 20:18:03
うっせーな。知りませんでしたよ、んなもん。
しるかっつーの!!

910 :デフォルトの名無しさん:2006/08/15(火) 21:21:09
ぐぐれるだけマシだ

911 :デフォルトの名無しさん:2006/08/15(火) 22:50:42
GetUserName でいいのかと思ってたら
もっと高度な話だったのか・・・

912 :デフォルトの名無しさん:2006/08/15(火) 23:15:11
>>911
で、ググレってあおってたわけ?

913 :デフォルトの名無しさん:2006/08/16(水) 00:00:36
>>912
質問する前にまずググれよ、カス

914 :904:2006/08/16(水) 00:31:07
RunAs/Secondary Logonサービスが出来てから
プロセスの実行権限が複雑になったらしい。
(トークンの概念はNT時代からあった。)
Vistaはこれをさらに強化したとか。
いずれこの辺の面倒臭い技術は避けて通れなくなるかも。

915 :デフォルトの名無しさん:2006/08/16(水) 01:26:19
猫でもできるプログラミングのメニュー付VS2005サンプルを実行して
ウインドウ閉じたときにでる確認ボックスでいいえを選んだらもう一回
ボックスが出るんですけど何ででしょうか?

916 :デフォルトの名無しさん:2006/08/16(水) 01:28:23
ちんちんかゆい

917 :デフォルトの名無しさん:2006/08/16(水) 03:14:22
ウィンドウのクライアント領域に、ファイルをドラッグした時の
ファイル名の取得はどうすればいいんでしょうか?


918 :デフォルトの名無しさん:2006/08/16(水) 03:16:21
DragQueryFile

919 :デフォルトの名無しさん:2006/08/16(水) 10:51:00
RegisterDragDropでもできる
テキストやらビットマップやら各種OLEデータも受け付ける場合はこっち


920 :デフォルトの名無しさん:2006/08/16(水) 14:52:06
メモ帳風エジタを作ろうとして、とりあえずメインウィンドウのクライアント領域に
複数行エジットコントロール(自動スクロールバー付き)を貼り付けてみました。
ところが、垂直スクロールバーの方は、行がウィンドウの高さ以上になればちゃんと自動で出て来くるし、
ウィンドウ内に納まる状態になれば、きちんと使用不可状態になるんですが、
水平スクロールバーが、文字列の長さがウィンドウ以上になった後、
改行してはみ出さなくしても、そのまま、前にはみ出したところまで
スクロールできるままの状態になり、戻りません。
これを直すにはどうしたらいいでしょうか?
ちなみに、メモ帳(本物)でもそうなっているようです。

921 :デフォルトの名無しさん:2006/08/16(水) 15:01:57
エジタとかエジットとか猫プロの中の人ですか?
ちなみにディはDHIで出せます

922 :デフォルトの名無しさん:2006/08/16(水) 15:19:04
ふと思ったんですが、
 FindFirstFile( "*.*", ...  と
 FindFirstFile( "*", ...  って、
列挙結果に違いあるんですかね?
(そもそも *.* としたときに . を含まないファイルやフォルダにマッチするのは、何故?)

923 :デフォルトの名無しさん:2006/08/16(水) 15:23:53
DOS時代の変な仕様をいまだに引きずっているわけだ。


924 :デフォルトの名無しさん:2006/08/16(水) 16:02:55
>>922
仕様らしい。
救いなのは*.*で全取得が可能な事。
おれはFindFirstFileに*.*を指定して全取得して、
自分で納得いくマッチ処理でフィルタリングしてる。
自分でマッチ処理を書くのが面倒ならPathMatchSpecというAPIがある。
このAPIは聞いた話だとFindFirstFileよりはマシらしい。



925 :デフォルトの名無しさん:2006/08/16(水) 16:12:51
>>923
なんか勘違いしてる余寒

926 :デフォルトの名無しさん:2006/08/16(水) 16:22:51
*.*で . を含まないファイルにマッチするのは紛れもなくDOSとの互換性のためだぞ

927 :デフォルトの名無しさん:2006/08/16(水) 16:36:37
>>918 >>919
ありがと。おかげで解決しました

928 :デフォルトの名無しさん:2006/08/16(水) 16:48:20
DOSじゃなくてFATでしょ

929 :デフォルトの名無しさん:2006/08/16(水) 17:41:27
「.」と「..」も取得するのとかもかなりいらない仕様だよな

930 :デフォルトの名無しさん:2006/08/16(水) 22:38:52
>>925>>928
なんか勘違いしてる余寒

931 :デフォルトの名無しさん:2006/08/17(木) 06:05:35
たまにプログラムの最初で
DefWindowProc(NULL, 0, 0, 0)
とやってるのがありますが、どういう効果があるんでしょうか

932 :デフォルトの名無しさん:2006/08/17(木) 08:53:40
ttp://blogs.msdn.com/michkap/archive/2004/11/13/257049.aspx


933 :デフォルトの名無しさん:2006/08/17(木) 11:16:37
UNICOW's… 日本人がコメントに”うにコード”とか書くようなモンか

934 :デフォルトの名無しさん:2006/08/17(木) 13:38:07
stlってwindows.hをインクルードすると使えないんですか?
GUIとc++のライブラリ使いたいんで・・・

935 :デフォルトの名無しさん:2006/08/17(木) 13:41:02
んなこたーない。

936 :デフォルトの名無しさん:2006/08/17(木) 14:08:24
〜_sとか新しい関数が出てきて混乱してるんだけど
その辺を網羅した参考書って出てる?

937 :デフォルトの名無しさん:2006/08/17(木) 14:22:46
は?

938 :デフォルトの名無しさん:2006/08/17(木) 14:23:30
Cランタイムのことならスレ違い

939 :デフォルトの名無しさん:2006/08/17(木) 14:52:00
>>933
UNICOWSはMSLUの別名。

>>934
<algorithm>のstd::max, std::min関数と
<windows.h>の中のどこかのヘッダにあるmax, minマクロで、名前がかぶっているのがまずい。

<windows.h>がインクルードされるより前にNOMINMAXを定義(#define)して、
maxとminのマクロが定義されないようにする必要があるはず。

940 :デフォルトの名無しさん:2006/08/17(木) 16:59:23
VC++って普段は(ぶいしーぷらぷら)って読んでるんですが、
フォーマルな読み方はありますか?

941 :デフォルトの名無しさん:2006/08/17(木) 17:07:42
Cスレじゃねーんだよアホ共

942 :デフォルトの名無しさん:2006/08/17(木) 17:34:36
ヴィスィープラスプラス

943 :デフォルトの名無しさん:2006/08/17(木) 20:18:01
現在選択しているフォントに含まれない文字が
フォントリンクによってTextOutで描画される場合の
描画幅を得るにはどうすればいいんでしょうか?

944 :デフォルトの名無しさん:2006/08/17(木) 21:28:56
98でもAnimateWindow使えるのですか?

945 :デフォルトの名無しさん:2006/08/17(木) 21:49:19
>>944
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_animatewindow.asp

946 :デフォルトの名無しさん:2006/08/17(木) 21:51:21
>>945
使えるんですね。ありがとうございました。

947 :デフォルトの名無しさん:2006/08/18(金) 00:15:53
シャットダウンの処理について質問させてください。

WM_QUERYENDSESSIONでシャットダウンを検知した後、
全ウィンドウの後始末処理をさせるためPostQuitMessage(0)を実行して、
後始末が完了するまでまで待つ。という処理を行っているのですが、

WM_QUERYENDSESSIONが通知された後にPostQuitMessage(0)を実行した場合、
GetMessageがブロッキングしたまま終了してくれず、後始末完了まち状態で固まってしまいます。

GetMessageがブロッキングしたまま固まるのは仕様なのでしょうか?

948 :947:2006/08/18(金) 00:17:45
つまりは、PostQuitMessageによって全ウィンドウに
WM_QUITが伝わってほしいのですが、WM_QUERYENDSESSION後だと伝わらないので困っています。

949 :デフォルトの名無しさん:2006/08/18(金) 00:49:02
> PostQuitMessageによって全ウィンドウに
> WM_QUITが伝わってほしいのですが
PostQuitMessageについて激しく勘違いしてる悪寒

950 :デフォルトの名無しさん:2006/08/18(金) 09:31:06
Lunaスタイル適用したら、コンボボックスのドロップダウンがびろ〜ん伸びるねん。
スタイル外すとちゃんと設定した大きさで表示される。
なんでですか?

951 :デフォルトの名無しさん:2006/08/18(金) 10:27:03
こういうコードは良いんですか?コールバックとか登録してないけど
#include <windows.h>
#include <iostream.h>
#include <fstream.h>

int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
LPSTR lpsCmdLine, int nCmdShow)
{

char buf[512];

// ifstreamのインスタンスを作る
// C言語のfopenと同じ
ifstream ifs( "input.txt" ) ;

// ofstreamのインスタンスを作る
// C言語のfopenと同じ
ofstream ofs( "output.txt" ) ;

// ifstreamのインスタンス(ifs)から1行読み込みbufに入れる。
while( ifs.getline( buf, sizeof(buf) ))
// ofstreamのインスタンス(ofs)を利用して読み込んだ内容を書き込む
ofs << buf << endl;

return 0;
}

952 :デフォルトの名無しさん:2006/08/18(金) 10:30:15
>>951
「コールバックとか登録」って何?
あと <iostream.h> <fstream.h> は古いからやめなさい。
<iostream> <fstream>を使え。

953 :デフォルトの名無しさん:2006/08/18(金) 10:43:39
WNDCLASSEXとか
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
とかです、よく考えるとあれはシステムに詠んで貰うためだから、
コンソールみたいな上から下に向かって順序良く進む場合はいらないんですか?

もし
#include <windows.h>
#include <iostream>
#include <fstream>
とした場合下のようなのが出て
error C2065: 'ifstream' : 定義されていない識別子です。c:\win32\win32\main.cpp 13

#include <windows.h>
#include <iostream>
#include <fstream.h>
とおくと
fstream.hは開けませんと出て

STLportで
#include <windows.h>
#include <iostream>
#include <fstream>
とおくと、下のように出て
error C2065: 'ifstream' : 定義されていない識別子です。c:\win32\win32\main.cpp

#include <windows.h>
#include <iostream>
#include <fstream.h>
とおくと、コンパイルできるんですorz設定を間違ってるのかな・・・

954 :デフォルトの名無しさん:2006/08/18(金) 10:46:37
>>951
WinMainなプログラムでウィンドウを開かず、必要な処理だけしてすぐに終了しても構わんし、
逆にmainなプログラムでウィンドウを開いてもよい。

955 :デフォルトの名無しさん:2006/08/18(金) 10:48:44
>>953
「namespace」でぐぐれ

956 :947:2006/08/18(金) 10:52:38
>>949
まぢですか。
とりあえず、GetMessageのブロッキングが解除されてほしいのですが…。
WM_QUERYENDSESSION後だとなにやってもメインループのGetMessageが制御を返してくれません…。

957 :デフォルトの名無しさん:2006/08/18(金) 10:54:29
>>955
あ・・・・・・そういえばそんなのがありましたね、忘れてました。

958 :947:2006/08/18(金) 11:20:30
あっ、ごめんなさい。
なんか勘違いしてたかも。

質問は無視しちゃってください。

959 :950:2006/08/18(金) 11:44:34
No Integral HeightのプロパティがFALSEになってたよいつの間にか!
あほか!

960 :デフォルトの名無しさん:2006/08/18(金) 16:43:51
タブコントロールのタブがある行の余白の部分だけ(AA参照)を、標準色とは違う色で
描画したい(最終目的は親ダイアログに貼られているビットマップを
透過しているように見せかける)。


┌────┐──────┐
│  タブ1  │  タブ2     │ここの余白の色を変えたい
│       └──────┴───────────┐


調べた限りでは、オーナードローをするしかないのかな?と思うんだけど、
オーナードローだと、タブの部分もちまちま描くのがマンドクセだし、さらに
XPのVisual Styleにも対応しなきゃいけないので、さらにマンドクセ('A`)('A`)

他に簡単にできる方法があれば教えてください。


961 :デフォルトの名無しさん:2006/08/18(金) 17:05:18
マスク処理したグループボックスの上にでものせてお茶を濁すのが吉

962 :デフォルトの名無しさん:2006/08/18(金) 19:26:03
>>961
早速作ってみたです。
バッチリです。これなら普通の人にはバレないくらいにちゃんとできてるです。
ありがとうございました。

やっぱPGに一番必要なのは、関数を覚えることよりもやわらかアタマだねぇ。
と毎度のことながら痛感させられました。


963 :デフォルトの名無しさん:2006/08/18(金) 19:49:04
>>961, 962
目からうろこ。詳しくお願いします。

964 :デフォルトの名無しさん:2006/08/19(土) 01:45:44
API でネットワーク接続の有効/無効を切り替える方法を調べているんですが、
どの API を使えば良いのでしょうか。

Vista であれば WMI を使って切り替えられるのは分かったのですが、2000/2003/XP
では WMI を使って切り替えることは出来ないようで。

965 :デフォルトの名無しさん:2006/08/19(土) 02:39:36
>>964
netshじゃ駄目かのう

966 :デフォルトの名無しさん:2006/08/19(土) 02:51:56
>>965
どもです。
netsh の dump/exec を使ってみましたが、ネットワーク接続の有効/無効を
切り替えることは出来ないようです。


967 :デフォルトの名無しさん:2006/08/19(土) 05:25:38
>>961-962
すまん、オレも知りたい。

WM_PAINT の時に子コントロールの画像をマスクするわけか?
というか、タブの形をどうやって知ったんだ?

968 :デフォルトの名無しさん:2006/08/19(土) 08:18:27
>>968
リージョンですかね・・・
予想まきこ

969 :デフォルトの名無しさん:2006/08/19(土) 11:04:45
ハンドルを返す関数が失敗してNULLを返した時は、
DleteObject() で開放しなくてもいいんですよね

970 :デフォルトの名無しさん:2006/08/19(土) 11:28:08
最後のタブの隣に適当なコントロールを置いて、
そいつにDrawItemでタブの下に隠れた背景を描画するようにしたらどうだろう?

いずれにせよ>>961-962の解答待ちw


971 :デフォルトの名無しさん:2006/08/19(土) 11:43:47
複数のコンボボックスがあってある特定のコンボボックスの選択項目が
変更された時のみ更新をかけるっていう事やりたいんですけど単純に

if(HIWORD(wParam) == CBN_SELCHANGE)
処理;

とかでやるとすべてのコンボボックスが対象になってしまうと思うんですけど
これを回避するにはどうすればいいんでしょうか?

972 :971:2006/08/19(土) 11:57:57
デバッグで見たところlParamが変わってたからそれどうにかすればいいのかな

973 :971:2006/08/19(土) 12:02:32
lParamとコントロールのハンドル比較でできました。

if(HIWORD(wParam) == CBN_SELCHANGE && lParam == HWND)
処理;

ちなみにこの場合、HIWORDとLOWORDに分けなくていいんでしょうか?

974 :デフォルトの名無しさん:2006/08/19(土) 12:18:52
>>971-973
http://windowssdk.msdn.microsoft.com/en-us/library/ms647591.aspx
WM_COMMANDを受け取ったときのlParamにはコントロールのハンドルが入っていることになっている。

ところでよくキャスト無しでLPARAM型とHWND型の値を比較できるな。

975 :971:2006/08/19(土) 12:53:55
>>ところでよくキャスト無しでLPARAM型とHWND型の値を比較できるな。
すいません(´・ω・`)

976 :デフォルトの名無しさん:2006/08/19(土) 14:38:45
>>969
何も得られてないのに、何を解放しようというのだ。

977 :デフォルトの名無しさん:2006/08/20(日) 04:00:39
例えば、デスクトップからごみ箱を開くと、
ファイル名を指定して個別にファイルを完全削除が行えますが、
GUI を使わずに、ごみ箱内のファイルリストを得たり、
ごみ箱ないのファイルに操作を行なうには、どうしたら良いのでしょうか?
SHEmptyRecycleBin と SHQueryRecycleBin では期待していることができなさそうです。

978 :デフォルトの名無しさん:2006/08/20(日) 04:07:32
ルートにRECYCLERってSystem, Hiddenフォルダがあるから
そん中を思う存分漁るといい

979 :977:2006/08/20(日) 05:30:16
>>978
ありがとうございます。
あまり、Win32 API に頼らなくて良かったのですね。
あとは、下記の情報でなんとかできそうです。
ttp://support.microsoft.com/default.aspx?scid=kb;ja;136517

INFO2 が解析できないとダメっぽいですが orz

980 :デフォルトの名無しさん:2006/08/20(日) 06:09:12
ちゃんとやりたいならシェルネームスペース周りから攻めた方が良い

981 :977:2006/08/20(日) 07:22:21
>>980
どうもです。
検索してみたんですが、使い方に関する情報が無いですね...

982 :デフォルトの名無しさん:2006/08/20(日) 08:10:13
>>981
たしかに、シェル回りことで日本語の情報は少ないよ。

983 :デフォルトの名無しさん:2006/08/20(日) 08:19:27
IShellFolder とか PIDL でググれば結構出てくる

984 :デフォルトの名無しさん:2006/08/20(日) 08:20:04
ageちったゴメn

985 :デフォルトの名無しさん:2006/08/20(日) 09:22:42
次スレ
Win32API質問箱 Build45
http://pc8.2ch.net/test/read.cgi/tech/1156032806/l50

986 :デフォルトの名無しさん:2006/08/20(日) 18:02:20
質問があるのですが

int _tmain(int argc, _TCHAR* argv[])
{
::MessageBox(NULL, "aaa", "bbb", MB_OK);
return 0;
}

このプログラムをビルドすると

error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [4]' to 'LPCWSTR'

というエラーが出るのですが、そんな事はどうでも良くて
埋め

987 :デフォルトの名無しさん:2006/08/20(日) 18:10:43
確かに、そんなFAQどうでもいいわな。

988 :デフォルトの名無しさん:2006/08/20(日) 20:13:02
UNICOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOODE

989 :デフォルトの名無しさん:2006/08/20(日) 20:18:18
UNCODE

990 :デフォルトの名無しさん:2006/08/20(日) 20:21:06

VERY COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOL!


991 :デフォルトの名無しさん:2006/08/20(日) 21:39:52
うにこぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉど

992 :デフォルトの名無しさん:2006/08/20(日) 21:44:30
うにもぐ、て車あったね

993 :デフォルトの名無しさん:2006/08/20(日) 23:34:21
うにっくす

994 :デフォルトの名無しさん:2006/08/21(月) 00:04:59
梅子

995 :デフォルトの名無しさん:2006/08/21(月) 05:19:37
梅方梅朗

996 :デフォルトの名無しさん:2006/08/21(月) 08:49:12
996

997 :デフォルトの名無しさん:2006/08/21(月) 08:50:07
オーナー描画ボタンにbmp貼り付けることは出来ますか?

998 :デフォルトの名無しさん:2006/08/21(月) 08:55:07
出来ません

999 :デフォルトの名無しさん:2006/08/21(月) 08:57:47
マジすか orz
な、なら何かのボタンにbmp貼り付けは…?

それも出来ないとしたら、ボタンぽいのを自分で書くしかないんですかね

1000 :デフォルトの名無しさん:2006/08/21(月) 08:58:45
1000

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

254 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)