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

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

Win32API質問箱 Build48

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

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

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

2 :デフォルトの名無しさん:2006/12/15(金) 17:42:46
47 ttp://pc8.2ch.net/test/read.cgi/tech/1163375772/
46 ttp://pc8.2ch.net/test/read.cgi/tech/1159158014/
45 ttp://pc8.2ch.net/test/read.cgi/tech/1156032806/
44 ttp://pc8.2ch.net/test/read.cgi/tech/1151501925/
43 ttp://pc8.2ch.net/test/read.cgi/tech/1148005509/
42 ttp://pc8.2ch.net/test/read.cgi/tech/1144962549/
41 ttp://pc8.2ch.net/test/read.cgi/tech/1141392216/
40 ttp://pc8.2ch.net/test/read.cgi/tech/1138893959/
39 ttp://pc8.2ch.net/test/read.cgi/tech/1136673250/
38 ttp://pc8.2ch.net/test/read.cgi/tech/1133798345/
37 ttp://pc8.2ch.net/test/read.cgi/tech/1131884991/
36 ttp://pc8.2ch.net/test/read.cgi/tech/1128951330/
35 ttp://pc8.2ch.net/test/read.cgi/tech/1125850096/
34 ttp://pc8.2ch.net/test/read.cgi/tech/1122723009/
33 ttp://pc8.2ch.net/test/read.cgi/tech/1120153520/

3 :デフォルトの名無しさん:2006/12/15(金) 17:43:20
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/12/15(金) 17:44:20
- MSDN ホームページ
http://www.microsoft.com/japan/msdn/
- MSDN ライブラリ
http://msdn.microsoft.com/library/ja/
- MSDN 2 ライブラリ
http://msdn2.microsoft.com/ja-jp/library/

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

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

- Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
- Win32 プログラミング入門
http://www7.plala.or.jp/keny01/

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

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

5 :デフォルトの名無しさん:2006/12/15(金) 17:45:21
MSDN日本語版は誤訳があったり、一部欠けていたりするなど不完全なため、英語版推奨。
http://msdn.microsoft.com/library/
http://msdn2.microsoft.com/en-us/library/

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

MSDN ライブラリ 2006年8月版
http://www.microsoft.com/downloads/details.aspx?FamilyID=6671F8DA-B0CB-41DE-AD93-798FC71D344D&displaylang=ja

6 :デフォルトの名無しさん:2006/12/15(金) 18:04:27
windowssdk.msdn.microsoft.comは、もうmsdn2へ転送されるようになっている。

7 :デフォルトの名無しさん:2006/12/15(金) 20:50:59
C#相談室より、半誘導されてこちらにて質問させていただきます。

現在、キーボードやマウスによるキー入力を
どのデバイスから送られて来たのか判断した後、
場合によっては入力を握りつぶしたいと考えております。

デバイスを判断し、キーを取得するだけですと
WM_INPUTにてRawInputを使用することにより実現できたのですが、
キーを握りつぶすことが私の試行錯誤した上ではできませんでした。

キーを握りつぶそうとWH_KEYBOARD_LLをフックし、
WH_KEYBOARD_LLの時点でキーを握りつぶすとメッセージの順序の関係上だと思うのですが
WM_INPUTも呼ばれなくなってしまい、デバイスの識別ができないでおります。

他の処理も考え付かず、途方にくれている状態です。
WH_KEYBOARD_LLがWM_INPUTより先に呼ばれているならそこでデバイスを
識別できないかとも考えたのですが、私の調べた限りではできませんでした。

どうか皆様のお力を少しでもよいので貸していただけないでしょうか。
よろしくお願いいたします。


8 :デフォルトの名無しさん:2006/12/15(金) 21:10:05
999 名前:デフォルトの名無しさん 本日のレス 投稿日:2006/12/15(金) 21:01:08
1000なら1ヶ月ぶりに休みが取れる…

甘かったな・・・・もう1ヶ月がんがれ。

9 :デフォルトの名無しさん:2006/12/15(金) 21:45:03
>>7
WH_KEYBOARD_LLを仕込んでもマウスイベントは来ないよね?
マウス用にWH_MOUSE_LLも仕込めば良いんじゃないの?

10 :デフォルトの名無しさん:2006/12/15(金) 21:58:12
>どのデバイスから送られて来た

そんなにたくさんのデバイスがあるの?
マウスが16個とか?

11 :デフォルトの名無しさん:2006/12/15(金) 21:58:17
ヒープやスタックの開始アドレスを教えてくれるAPIはありますか?

12 :7:2006/12/15(金) 22:02:57
>>7
キーボードを例にとって、検証したので、
マウスの場合は載せておりませんでした。

>>10
はい、そのような状況下を仮定しております。

基本的に、マウスの件よりもキーボードのほうを重視しており、
マウスは同時に実装できればいいとオマケ程度に思っております。
不足していて申し訳ありません

13 :デフォルトの名無しさん:2006/12/15(金) 23:15:49
>>11
スタックはAPIではなくバッドノウハウで取得できる。
ヒープはシラネ。

14 :デフォルトの名無しさん:2006/12/15(金) 23:37:31
>>7
RegisterRawInputDevicesで
適当なwindowにWM_INPUTを飛ばしてやれば?

15 :デフォルトの名無しさん:2006/12/16(土) 00:57:51
>>14
というのはどういうことなのでしょうか?
WM_INPUTを飛ばすということは、すべてキーフックで握りつぶして
その後WM_INPUTを自分で送り、そこでデバイスの判別をして
場合によりまたキーを送るといった感じなのでしょうか。
ただその場合もWM_INPUTを送る際にデバイスが分かってないと意味がないので
結果目的は達せないのでは?それとも方法があるのかな・・

もしかすると自分の見解が違うのかもしれませんが、
その場合申し訳ないです。もう少し詳しく聞かせていただければ幸いです


16 :デフォルトの名無しさん:2006/12/16(土) 01:28:56
つか何をしたいのかよくわからん。
WM_INPUTの引数でデバイスの判別できるなら
メッセージハンドラでやりたいことすればいいんでねぇ?てこと。
あと適当なwindow→自前のwindowというべきだったかな。

17 :デフォルトの名無しさん:2006/12/16(土) 01:35:19
握りつぶしたいんだろ?
でも WM_INPUT を握りつぶしてもキー入力は止められない、さあどうしよう、と。

RawInput からは外れるがフィルタドライバとかでどうにかならんかな?
C# じゃ多分書けないだろうけど。

18 :デフォルトの名無しさん:2006/12/16(土) 01:45:35
あぁそうか。フィルタドライバはデバイスを限定するために必要って事か。
となるとC丼じゃ間違いなく無理だな。DDKの仕事だ。

19 :デフォルトの名無しさん:2006/12/16(土) 11:35:21
Win32APIで、μ秒単位の割り込みを発生させるにはどうやったいいんでしょう?

20 :デフォルトの名無しさん:2006/12/16(土) 11:38:49
無理

21 :デフォルトの名無しさん:2006/12/16(土) 11:39:36
ドライバ書く。
ってWin32 APIと違うか。

22 :デフォルトの名無しさん:2006/12/16(土) 12:13:52
ドライバも開発キットが無料でDLできたり、
日本語の書籍も少しだけ出てたりして敷居が下がったな。


っていうけど英語が苦手な俺にはクリスマスとかバレンタイン並みに遠く感じる世界だった('A`)

23 :デフォルトの名無しさん:2006/12/16(土) 12:17:16
技術的な敷居は下がったけどx64で署名が強要されたりする方面の敷居は高くなったな

24 :デフォルトの名無しさん:2006/12/16(土) 14:08:08
RegisterClassEx()の引数のWNDCLASSEX構造体の中身ってアプリケーションが終了するまで
保持しなきゃいけないの?

今複数のクラスを登録するつもりで一つのWNDCLASSEX変数の値を一部書き換えてはRegisterClassEx()、
一部書き換えてはRegisterClassEx()するコード書いたら、先に登録したはずのクラス名が見つからんとか
言われてしまった。んで各クラス数ぶんだけ変数領域別にしたら正常に動作。
MSDNにはそれっぽい事は見つからなかったので教えて下され

25 :デフォルトの名無しさん:2006/12/16(土) 16:02:29
>>24
違う原因としか思えない

26 :デフォルトの名無しさん:2006/12/16(土) 16:45:11
WNDCLASSEXをローカル変数にしたコードが無問題なので原因は別

27 :デフォルトの名無しさん:2006/12/16(土) 18:07:24
クラス名っていうから文字列データの話じゃなかろうか。

普通に考えればコピーされているはずだが。

28 :デフォルトの名無しさん:2006/12/16(土) 18:16:37
前スレ >>963
HKEY_CLASSES_ROOT
より
HKEY_CURRENT_USER\Software\Classes
のほうが優先されるから気をつけて。

29 :デフォルトの名無しさん:2006/12/16(土) 18:22:16
>>11
GetSystemInfo

30 :デフォルトの名無しさん:2006/12/16(土) 18:23:28
>>28
それは違う。正しくは
HKEY_LOCAL_MACHINE\Software\Classes
より
HKEY_CURRENT_USER\Software\Classes
が優先される。そもそも
HKEY_CLASSES_ROOT
は優先順位を考慮して両方をマージした結果になるので他を見る必要はない。

31 :7:2006/12/16(土) 19:30:48
やはりフィルタドライバの作成になるのでしょうか・・
何度かフィルタドライバの話も出ており、興味はあったのですが
なかなか踏み込めずにいたのでこれを機会になんとか頑張ってみたいと思います。
お答えいただいた皆様ありがとうございました。


32 :デフォルトの名無しさん:2006/12/16(土) 20:13:22
教えてください。

リソースのメニューバーにあるボタンが押下された場合
ハンドルを取得するにはどうすればいいんでしょうか?

CheckBox = SendMessage(???, BM_GETCHECK, 0, 0L);
でチェックボックスの状態を調べたいんですが
リソースで作成されたメニューのコントロールのハンドルがわかりませぬ。



33 :32:2006/12/16(土) 20:28:11
EnableMenuItemを使って自己解決しました。

34 :デフォルトの名無しさん:2006/12/16(土) 22:50:51
ビットマップ画像中のゴミ(白のバックに黒ピクセルが点在してる)を検出して
白く塗すプログラムを組んでいます。
3500×3500くらいまでの画像なら問題なく実行するのですが、4000×7000くらい以上では
処理が行われなくなります。(少しの間矢印ポインタが砂時計になるだけ)
メモリは確保できてるのでオーバーフローはないと思うのですが、他に考えられそうな
原因があればご助言ください。
そこから改善を詰めていきたいと思います。
よろしくお願いします。

35 :デフォルトの名無しさん:2006/12/16(土) 23:12:04
お前が書いたコードにバグがある。

36 :デフォルトの名無しさん:2006/12/16(土) 23:33:43
エラーコードくらい確認したんだろうな。

37 :デフォルトの名無しさん:2006/12/16(土) 23:51:00
ダイアログにアイコンつけたいんですがリソースに記述するのか
別のやり方でアイコンを貼り付けるのかわかりません。

PROCESSDLG DIALOGEX 0, 0, 300, 125
STYLE WS_POPUP | WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SYSMENU
CAPTION "ダイアログ"
ICON IDI_ICON /* これじゃダメなのか!? */
FONT 9, "MS Pゴシック"
BEGIN
DEFPUSHBUTTON テスト", IDC_BOOT, 50, 50, 50, 14
END

お願いします。

38 :34:2006/12/17(日) 00:14:25
>>35>>36
調べてみたところ、「このコマンドを実行するのに十分な記憶域がありません。」とのことでした。
メモリまわりの処理を見直してみることにします。
ありがとうございました。

39 :34:2006/12/17(日) 00:32:36
原因が分かりました!!
ちゃんと処理するようになりました!!
>>36さんが指摘してくださったエラーコード取得のおかげです!!
ほんとうにありがとうございました!!

40 :デフォルトの名無しさん:2006/12/17(日) 00:56:12
たまに成功してるのにエラーコード設定するAPIがあるんだよな
しかもMSDNに記述してなかったり… ほんとWin32APIは泥沼だぜ(´・ω・`)

>>37
ダイアログ自体なら
SendMessage(hwnd, WM_SETICON, ICON_SMALL, hIcon);
スタティックへのイメージ貼り付けなら
SendDlgItemMessage(hwnd, IDC_xxx, STM_SETICON, hIcon, 0);


41 :デフォルトの名無しさん:2006/12/17(日) 01:05:56
>>40
あー、気づけよ俺orz

ありがとうございます。

42 :デフォルトの名無しさん:2006/12/17(日) 03:16:18
>>19
調べれば沢山見つかると思うけど、
QueryPerformanceFrequency
QueryPerformanceCounter
あたりで、計測すれば1msec以下の周期は作る事ができる。

43 :デフォルトの名無しさん:2006/12/17(日) 10:07:32
環境:vs2005EE C/C++

GDI+を使ってみようと思い、下記猫でも〜のを参考に
ttp://www.kumei.ne.jp/c_lang/sdk4/sdk_335.htm

メインのcppに #include <gdiplus.h> using namespace Gdiplus; を追加し
プロジェクトにGdiplus.libを追加し 
〜とやって、雛形のみを作成し、起動させるだけのテストをしてみたのですが

コンパイルしたところ
gdimagepulsimaging.h の67行目の IImageBytes : public IUnknown が問題らしく

c:\program files\microsoft platform sdk\include\gdiplusimaging.h(67) :
error C2440: '初期化中' : 'const char [37]' から 'int' に変換できません。この変換が可能なコンテキストはありません。
c:\program files\microsoft platform sdk\include\gdiplusimaging.h(67) :
error C2146: 構文エラー : ';' が、識別子 'IImageBytes' の前に必要です。
c:\program files\microsoft platform sdk\include\gdiplusimaging.h(67) :
error C2470: 'IImageBytes' : 関数定義のようですが、パラメータ リストがありません。外見上の本体をスキップします。
c:\program files\microsoft platform sdk\include\gdiplusimaging.h(67) :
error C2059: 構文エラー : 'public'
c:\program files\microsoft platform sdk\include\gdiplusimaging.h(246) :
error C2146: 構文エラー : ';' が、識別子 'id' の前に必要です。
c:\program files\microsoft platform sdk\include\gdiplusimaging.h(246) :
error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
c:\program files\microsoft platform sdk\include\gdiplusimaging.h(246) :
error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
c:\program files\microsoft platform sdk\include\gdiplusheaders.h(384) :
error C2143: 構文エラー : ')' が '*' の前にありません。
c:\program files\microsoft platform sdk\include\gdiplusheaders.h(384) :
error C2143: 構文エラー : ';' が '*' の前にありません。
…と以下エラーが100以上出てきてしまいました。

44 :デフォルトの名無しさん:2006/12/17(日) 10:15:29
↑一行目のエラーが抜けてました

c:\program files\microsoft platform sdk\include\gdiplusimaging.h(67) :
error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません


これは何かまだしなくてはいけない事があるのでしょうか
それとも、IImageBytes : public IUnknown の前に型指定子を書き足した方が良いんでしょうか

実行ソース:
Gdiplus.libを追加

#include <gdiplus.h>
#include <gdiplus.h>
using namespace Gdiplus;

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
// グローバル文字列を初期化しています。

GdiplusStartup(&gdiToken, &gdiSI, NULL);
// アプリケーションの初期化を実行します:

// メイン メッセージ ループ:

GdiplusShutdown(gdiToken);
return (int) msg.wParam;
}

〜:処理

45 :デフォルトの名無しさん:2006/12/17(日) 10:17:11

#include <gdiplus.h>
#include <gdiplus.h>
はコピペ失敗

#include <gdiplus.h> 一つになってます。
あと、int APIENTRY _tWinMain以外は手を付けていないので省略しました。

46 :デフォルトの名無しさん:2006/12/17(日) 10:44:47
<gdiplus.h>より先に<ole2.h>をインクルードしろ。
WIN32_LEAN_AND_MEAN抜きで<windows.h>をインクルードするのも良い。

47 :デフォルトの名無しさん:2006/12/17(日) 10:45:57
すみません、自己解決しました。

#include <comsvcs.h> を
#include <gdiplus.h> の前に入れたら通りました。

48 :デフォルトの名無しさん:2006/12/17(日) 10:46:38
>>46
ありがとうございます。

49 :デフォルトの名無しさん:2006/12/17(日) 11:13:14
>>40
APIが成功した場合、特に明記がない場合GetLastErrorの値は不定だったと思う。
つまり、明記されている条件以外のGetLastError値に意味はない。

50 :デフォルトの名無しさん:2006/12/17(日) 11:46:41
タスクトレイにアイコンを表示させたいのですがうまくいきません。
タスクトレイにはアイコンのスペースだけが空いて絵が表示されないです。

リソーススクリプトには
MYICONICONDISCARDABLE"icon.ico"
とし

関数で

#define MYTRAY_MESSAGE (WM_APP + 1)
NOTIFYICONDATA ni;

int MyInitNotifyIcon(HWND hWnd)
{
memset(&ni, 0, sizeof(NOTIFYICONDATA));

ni.cbSize = sizeof(NOTIFYICONDATA);
ni.hWnd = hWnd;
ni.uID = 0;
ni.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
ni.hIcon = (HICON)LoadImage(hInst, "MYICON", IMAGE_ICON, 0, 0, 0);
ni.uCallbackMessage = MYTRAY_MESSAGE;
strcpy(ni.szTip, "  ");
Shell_NotifyIcon(NIM_ADD, &ni);
return 0;
}


icon.icoは作業用のフォルダに入れています。

51 :50:2006/12/17(日) 11:49:12
訂正

リソーススクリプト

MYICON   ICON    DISCARDABLE   "icon.ico"


52 :デフォルトの名無しさん:2006/12/17(日) 12:17:57
>>40が言う、MSDNに記述してないAPIを聞いておきたい。

53 :デフォルトの名無しさん:2006/12/17(日) 12:55:39
テスト &ni

54 :デフォルトの名無しさん:2006/12/17(日) 12:56:44
>>52
SC_HANDLE h = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT); // ここで997
SetLastError(NO_ERROR);
CloseServiceHandle(h); // ここでも997
おもしろくもないけど2kでどうぞ
XPじゃなんともないから極度に環境に起因してるのかも知れんけど、起こりうる一例ということで

うちの2kでエラーコードログとったらどこもかしこも997ですげえ欝だった

55 :デフォルトの名無しさん:2006/12/17(日) 12:58:35
∋ = &ni か

56 :デフォルトの名無しさん:2006/12/17(日) 13:11:56
アイコンのサイズが合ってないんじゃね?

57 :デフォルトの名無しさん:2006/12/17(日) 13:24:31
リソースファイルが作れてないとか?

つか、>>53>>55の意味が分からん

58 :デフォルトの名無しさん:2006/12/17(日) 13:36:53
特殊文字のテスト

59 :デフォルトの名無しさん:2006/12/17(日) 14:19:42
NtQuerySystemInformationとか?

と思ったらあったわ
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/ntquerysysteminformation.asp

60 :54:2006/12/17(日) 14:28:10
ああ俺52の意味履き違えてるね
MessageBoxTimeoutとか?

61 :50:2006/12/17(日) 14:31:20
>>56
アイコンはほかのソフトとかで使われているものでためしています。

>>57
リソースファイルはダイアロボックスも書いているのですが
ダイアロボックスは問題なく起動しています。
>>51で書込みをしたようにアイコンの定義は書いてあります。


62 :デフォルトの名無しさん:2006/12/17(日) 14:39:24
>>54
>>49
APIが成功したらGetLastErrorも成功値を返すとは記述されてない。

63 :デフォルトの名無しさん:2006/12/17(日) 15:04:33
16x16に32x32のアイコン入れても無駄だって

64 :デフォルトの名無しさん:2006/12/17(日) 17:04:20
作業用のフォルダ・・・

65 :デフォルトの名無しさん:2006/12/17(日) 17:15:50
ni.hIcon = (HICON)GetClassLong( hWnd, GCL_HICONSM );
アプリアイコンとタスクトレイ用のアイコンが変わらないなら此でもok

66 :デフォルトの名無しさん:2006/12/17(日) 17:18:20
あ、二行目は忘れてくれ

67 :デフォルトの名無しさん:2006/12/17(日) 17:32:27
SendMessage(Kanojo, WM_LOVE, wParam, lParam);

と、何度も彼女にメッセージを送ってみたのですが届きません。
何者かにメッセージフックされてるのでしょうか?
原因を教えて下さい ><

68 :デフォルトの名無しさん:2006/12/17(日) 17:41:17
>>67
そのMsgは破棄されて次の処理に移ってると思われる。
多分、こんなSQLが発行されているかと。
insert into Kanojo.Manko values('HokanoOtoko','DekaiChinpo')
もうCommitされているのでRollBack不可らしい。
Update,Delete文発行してもTriggerではじかれるので無理みたい。






今年のクリスマスはあきらめれ。

69 :デフォルトの名無しさん:2006/12/17(日) 17:42:56
#ifdef WM_LOVE
#undef WM_LOVE
#endif
#define WM_LOVE WM_KILLFOCUS

70 :デフォルトの名無しさん:2006/12/17(日) 18:07:56
ツマンネ

71 :67:2006/12/17(日) 18:12:10
>>68 ありがとう ><

72 :デフォルトの名無しさん:2006/12/17(日) 18:34:03
>>50 そのままで出来るはず。
新規にプロジェクトを作成して、もう一度 やってみてはどうだろう?

73 :デフォルトの名無しさん:2006/12/17(日) 18:50:53
Visual Studioでメニューの  デバッグ->デバッグなしで開始  からコンソルアプリを起動すると
アプリが終了するとPress any key to continueとでるのを真似したいのですがどうすればいいか分かりません

CreateProcessでCREATE_NEW_CONSOLEを指定してコンソールが表示されて実行されるのですが終了すると
自動的に閉じられてしまいます

コンソ-ルアプリ側のソースを変更しないで実現する方法はありますか?

74 :デフォルトの名無しさん:2006/12/17(日) 19:09:55
api使わなくてもCの初歩でできるでしょ

75 :デフォルトの名無しさん:2006/12/17(日) 20:17:08
大サービスだ。こんな感じだろ。
#define _WIN32_IE 0x0400
#include <windows.h>
#include <shlwapi.h>

int main()
{
    STARTUPINFO si = {sizeof si};
    PROCESS_INFOMATION pi;
    if (!CreateProcess(0, PathGetArgs(GetCommandLine()), ..., &si, &pi))
        return 1;
    CloseHandle(pi.hThread);
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hProcess);
    TCHAR msg[] = TEXT("Press any key to continue");
    DWORD numWrite;
    WriteConsole(GetStdHandle(STD_ERROR_HANDLE), msg, sizeof msg / sizeof msg[0] - 1, &numWrite, 0);
    return 0;
}

76 :デフォルトの名無しさん:2006/12/17(日) 20:49:17
ゴッド

77 :73:2006/12/17(日) 20:51:08
>>75
ソースありがとうございます

しかしながらこれだとCreateProcess呼び出し側のコンソールにPress any key to continueが表示されると思われます
今回実現したいのはCreateProcessのときCREATE_NEW_CONSOLEを指定し対象アプリを別コンソールで実行し
そのコンソールにPress any key to continueを表示するようにしたいです. 説明不足でごめんなさい

>>74
プロセス関連で使えるC標準関数はsystemとかpopenだと思うのですが
systemの場合、以下のダミーexeをCreateProcess + CREATE_NEW_CONSOLEを呼び出すことによって実現できました
popenは現在の環境(VC7.1)にはありませんでした. ありがとうございます
int main(...) {
 std::string command(argv[1]);
 command = "\"" + command + "\"";
 system(command.c_str());
 std::cout << "Press any key to continue" << std::endl;
 char c; std::cin >> c;
}

78 :デフォルトの名無しさん:2006/12/17(日) 20:54:16
>>77
75のプログラムをCREATE_NEW_CONSOLEを指定してCreateProcessすればいい。

79 :50:2006/12/17(日) 23:48:21
>>72
新しくやってもだめでした。

>>65
それもやってみたのですが同じ現象でした。

>>63
32x32のアイコンを使っていました。


80 :デフォルトの名無しさん:2006/12/18(月) 00:11:37
RS-232Cシリアル通信でCTS監視有効時の
WriteFileの動作仕様を知りたいです。

・送信中ずっとCTS ON→問題なく送信される
・送信途中にCTS OFF→どうなるのでしょうか?

・1バイト送信するためには電気信号は10パルス分の時間が必要ですが、
例えば、5パルス目にCTS OFFとなった場合は、送信中の1バイト分のデータは相手に届くのでしょうか?


81 :80:2006/12/18(月) 00:19:05
追加です。
CTS監視有効はDCB構造体で指定しています。
(DCB.fOutxCtsFlow = TRUE; // CTS output flow control )

よろしくお願いします。

82 :デフォルトの名無しさん:2006/12/18(月) 01:26:25
マルチスレッドうぜえええええええええええええ
もう煮詰まって無理ぽsdg;lfかjf;lcz;lg;あえが

叫んでみたかったんだ

83 :デフォルトの名無しさん:2006/12/18(月) 01:38:44
ストレス発散はド低脳スレでやれよ

84 :デフォルトの名無しさん:2006/12/18(月) 02:15:10
責任転嫁されて可哀想なマルチスレッド‥

85 :デフォルトの名無しさん:2006/12/18(月) 02:19:18
CreateDIBitmapを用いたBITMAPの読み込みには、GDIリソースの制限が絡む(XPではヒープ領域?)、
とのことですが、読み込みたいファイルのサイズが読み込めないほどの大きさだった場合、
どのようにすれば読み込めるようにできるでしょうか?
PC環境の変更によるものよりも、プログラム側での処置ができるとうれしいです。

86 :デフォルトの名無しさん:2006/12/18(月) 02:40:18
>>85
なんつーか、読み込めないものは読み込めないでしょ。
もし一部でもいいから読み込みたいってんなら、ビットマップのファイル
構造を自分で走査すればいい。必要な範囲だけ取り出してくることも
できるわけだし。

87 :85:2006/12/18(月) 10:21:54
>>86
了解です。
しかし、photoshopなんかの画像処理ソフトは大きい画像でも平気で読み込んでしまうのは
なぜなんでしょうか??

88 :デフォルトの名無しさん:2006/12/18(月) 10:28:14
>>85
自分はプログラムは 98機で未だにやっているが、写真が 3008x2000になって
テスト出来なくて困った。jpeg解凍してサイズが大きくて98機の場合、一辺が
1500未満になるまで縮めるようにしたよ。StretchDIBits()が効かなくて初め
はなんだろうと思ったね。写真をアイコンにするために一気に 64x64 とかも
出来なかった。そのせいで画像縮小も勉強した。手間のかかることよ。

89 :デフォルトの名無しさん:2006/12/18(月) 10:31:04
>>87
ビットマップのファイル構造を自分で走査してるから

90 :85:2006/12/18(月) 10:49:07
>>88
それはたいへんですね・・・。
WinFXで解決してほしいですね。
>>89
なるほど、それをすれば解決できそうですね。
ありがとうございました。

91 :デフォルトの名無しさん:2006/12/18(月) 18:01:13
元WinFX現.Net3.0では、WindowsXP,2003,Vistaのみの対応となるので、
ある意味解決してる(w

92 :デフォルトの名無しさん:2006/12/18(月) 18:15:25
もう98はええやろ・・・

93 :デフォルトの名無しさん:2006/12/18(月) 18:35:29
>92
ウチでは現役だぞ…

94 :デフォルトの名無しさん:2006/12/18(月) 18:49:28
だから何?

95 :デフォルトの名無しさん:2006/12/18(月) 20:31:53
AdvancedWindows買ったぜwwwwwwwww
これで俺も最強のプログラマだな。な?

96 :デフォルトの名無しさん:2006/12/18(月) 20:34:12
本棚の飾りですか?

97 :デフォルトの名無しさん:2006/12/18(月) 20:38:02
DIBSectionを使え、ということらしい。

98 :デフォルトの名無しさん:2006/12/18(月) 20:39:26
>>96
ええそうです。

99 :デフォルトの名無しさん:2006/12/18(月) 20:53:15
>>95
俺も半月前に買ったくちだぜw 
.NET3使って何ぼな時代に1万(1000page)の本はテンションあがるよなww

100 :デフォルトの名無しさん:2006/12/18(月) 23:11:03
注目!!!!

http://www.microsoft.com/japan/msdn/vstudio/downloads/sp/vs2005/sp1/

Visual Studio 2005 SP1きたお

101 :デフォルトの名無しさん:2006/12/18(月) 23:12:52
windows updateで前から出来てなかったっけ?

102 :デフォルトの名無しさん:2006/12/18(月) 23:52:34
スレ違い

103 :デフォルトの名無しさん:2006/12/18(月) 23:52:38
サウンドを鳴らす事はできたのですが
これを2倍速で音の高さを変えないで鳴らすって事ができません。

どうすれば良いのでしょうか?

104 :デフォルトの名無しさん:2006/12/18(月) 23:57:08
かんがえかただけ…

再生データの並びを仮に
1,2,3,4,5,6,7,8,9とする。
高速再生するときは
13579とあいだをはぶいて再生。


実際はここまで単純でなく、演算して何とかつなげる


105 :デフォルトの名無しさん:2006/12/19(火) 00:08:06

すれ違い

106 :デフォルトの名無しさん:2006/12/19(火) 00:10:37
>103
そりゃなかなか難しい。話速変換とかで調べてみな。

107 :デフォルトの名無しさん:2006/12/19(火) 00:29:54
>>104
それだとオクターブ高くなるんじゃね?

108 :103:2006/12/19(火) 00:33:45
>>104,106
ありがとうございます。
とりあえずAPIへ送るデータを加工してやってみます。

109 :104:2006/12/19(火) 00:36:39
>>107
説明が適当すぎたね。
実際は 123456789だと表現しづらい…じゃあそんな表現するなよ俺!

123456789のそれぞれの数字はは実際のバイトじゃなくてデータの塊なのです。
各数字をたとえば0.1秒の音声データブロックと考えてください。

1秒のデータを0.5秒で再生するには間のデータを間引いてつなげるのです。



110 :95:2006/12/19(火) 00:56:24
>>99
俺の心理を読む奴がいるとはwwwwwwwww

買う=金欠になる事をわかっていながら頭を抱えて悩んだ末に
決死の覚悟で購入した俺はある種半狂乱状態だったんだwwwwwww

高いんだよwwwwwwwwwwww

111 :デフォルトの名無しさん:2006/12/19(火) 04:05:06
SSL通信したいんですが

112 :デフォルトの名無しさん:2006/12/19(火) 07:40:17
許可します

113 :デフォルトの名無しさん:2006/12/19(火) 07:53:55
リストビューで質問があります。
リストビューに大量のアイテムデータを表示させると、やっぱりメモリはへりつづけていくものでしょうか?
パフォーマンスモニタでメモリをチェックしているとへっていくばかりなので・・・
よろしくお願いします。

114 :デフォルトの名無しさん:2006/12/19(火) 08:42:22
多かったらスクロールだろうから「表示」自体では一定以上はメモリ使わない。

115 :デフォルトの名無しさん:2006/12/19(火) 14:47:04
くだすれC言語(初心者用)から誘導を受けてきました。
BCB6でソフトウェアキーボードを作ってみようと思うんですが、
keybd_eventのことについて全く知識がなく、検索かけてみたんですが、
あまり詳しく載っている所がありません。
加えて、文字を打ち込みたい箇所をアクティブにする操作も分からないので、
どなたか詳しく紹介されてあるページか、操作そのものを教えていただけると幸いです。。。。

116 :デフォルトの名無しさん:2006/12/19(火) 15:01:25
>>115
keybd_eventは使うな
SendInputを使え

117 :デフォルトの名無しさん:2006/12/19(火) 15:03:40
VOID EventKey(CONST DWORD dwKey)
{
INT i;
INPUT inputKey[2];

for(i = 0; i < 2; i++)
{
inputKey[i].type = INPUT_KEYBOARD;
inputKey[i].ki.wVk = (WORD)dwKey;
inputKey[i].ki.wScan = (WORD)MapVirtualKey((UINT)dwKey, 0);
inputKey[i].ki.time = 0;
if((i % 2) == 0)
{
inputKey[i].ki.dwFlags = 0;
}
else
{
inputKey[i].ki.dwFlags = KEYEVENTF_KEYUP;
}
inputKey[i].ki.dwExtraInfo = 0;
}

SendInput(2, &inputKey[0], sizeof(INPUT));

return;
}

118 :50:2006/12/19(火) 15:05:58
アイコン表示されるようになりました。
常駐プログラムを作成使用と考えているのですが
winmainにダミーの親ウインドウを作り
MyInitNotifyIcon関数(タスクトレイでのアイコン表示)
を呼び出しています。しかし、アイコンは最初表示するのですが
すぐに消えてしまいます。
何かいい方法はありますか?

119 :デフォルトの名無しさん:2006/12/19(火) 15:15:23
keybd_eventに対するSendInputの利点って、
連続で送信する場合に、間に割り込まれることがないってこと?

キーを一つだけ押したいって場合には、どちらも差はないのかな?

120 :デフォルトの名無しさん:2006/12/19(火) 15:25:22
>>119
> Windows NT/2000/XP:This function has been superseded. Use SendInput instead.

121 :115:2006/12/19(火) 20:08:16
>116-117
大体理解できました。
SendInputを用いて取り組んで見ます。
ありがとうございます。

122 :デフォルトの名無しさん:2006/12/19(火) 21:09:32
>>114
どうも〜

123 :デフォルトの名無しさん:2006/12/19(火) 23:18:26
ウィンドウのサイズ変更について質問させてください。
ウィンドウスタイルでWS_POPUPを指定して作ったウィンドウで、
マウス操作でサイズを変更できるようにするために、WM_NCHITTESTでHTLEFT等
を返すようにして対応しました。この状態では旨く動きます。

ところが、WS_SYSMENUを追加するとサイズ変更ができなくなりました。
カーソルも矢印に変化しません。

どなたか、この理由か回避方法を教えてください。
指定しているウィンドウスタイルはWS_POPUPとWS_SYSMENUのみです。

124 :デフォルトの名無しさん:2006/12/19(火) 23:46:36
不思議な現象を見つけました。

以下のプログラムx.exeでは'Enter'キーで子プロセス
msgbox.exeが実行され、戻ってくるまでの間
ウィンドウをディスエーブルします。

で、すぐにmsgbox.exeを(OKボタンを押して)
終了させた場合にはx.exeはフォーカスを失います。

でもOKボタンを押すのを少し待っていると、
x.exeがグレーアウトし、その後にOKボタンを押すと
x.exeはフォーカスを失いません。

これって、どういう事なんでしょうか?

WinXP SP2です。

<<x.c>>
#include <windows.h>

void execute(HWND hwnd){
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory(&si, sizeof(si));
    EnableWindow(hwnd, FALSE);
    CreateProcessA(NULL, "C:\\DATA\\PROG\\WIN32\\ディスエーブル\\msgbox.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    WaitForSingleObject(pi.hProcess, INFINITE);
    EnableWindow(hwnd, TRUE);
}

125 :デフォルトの名無しさん:2006/12/19(火) 23:54:39
そのコードだとEnableWindow()が実際に処理される前に子プロセスが動くからだろ。

126 :デフォルトの名無しさん:2006/12/19(火) 23:59:52
EnableWindowって非同期で動いたっけ?

127 :124:2006/12/20(水) 00:15:36
#pragma argsused
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE b, LPSTR c, int d){
    WNDCLASSA wc;
    HWND hWndMain;
    MSG msg;

    ZeroMemory(&wc, sizeof(wc));
    wc.lpfnWndProc = DefWindowProcA;
    wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
    wc.lpszClassName = "MyClass";
    RegisterClassA(&wc);
    hWndMain = CreateWindowExA(0, "MyClass", "", WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, hInstance, NULL);
    for(;;){
        if (!IsWindow(hWndMain)){
            break;
        }
        GetMessageA(&msg, NULL, 0, -1);
        TranslateMessage(&msg);
        DispatchMessageA(&msg);
        if (msg.message == WM_KEYDOWN){
            if (msg.wParam == VK_RETURN){


128 :デフォルトの名無しさん:2006/12/20(水) 00:16:09
>>95,99
こんな高い本、会社で買ったなあ…。
自分で買ったほうが真面目に読むのかもしれないだけど。

129 :124:2006/12/20(水) 00:17:57
                execute(hWndMain);
            }
        }
    }
    return 0;
}


<<msgbox.c>>
#include <windows.h>

#pragma argsused
int WINAPI WinMain(HINSTANCE a, HINSTANCE b, LPSTR c, int d){
    MessageBoxA(NULL, "Hello", "msgbox.exe", MB_OK);
    return 0;
}

改行が多すぎますエラーでなかなかうまく書けない・・・

130 :デフォルトの名無しさん:2006/12/20(水) 00:28:28
>>119
利点っていうかSendInputに取って代わられたから
将来keybd_eventAPIがなくなる可能性があるからだろ

131 :124:2006/12/20(水) 00:37:56
>>125
今、調べてみます。

132 :デフォルトの名無しさん:2006/12/20(水) 01:19:56
>>123
単にWS_THICKFRAMEつけりゃいいんじゃねーの?


133 :デフォルトの名無しさん:2006/12/20(水) 03:04:22
CreateProcessでコンソールアプリを実行して、
パイプで標準出力と標準エラーに出る文字を拾ってきたいのですが、
子プロセスが終了するまでReadFileのところで止まってしまいます。
出力途中の文字列を拾ってくるにはどうしたらいいんでしょうか。

134 :デフォルトの名無しさん:2006/12/20(水) 07:26:19
・PeekNamedPipe使って、何バイト読めるかを事前調査し、それ以上読まない
・Overlapped構造体を指定してReadFile
のお好きな方をどうぞ。

135 :デフォルトの名無しさん:2006/12/20(水) 10:48:04
>>123
そのシステムメニューのサイズ変更は有効になってる?

136 :デフォルトの名無しさん:2006/12/20(水) 10:52:21
>>123
WM_NCLBUTTONDOWはサイズ変更に入る場合システムメニューの状態を調べます。
システムメニューにサイズ変更をつけるか、GetSystemMenuでリセットしましょう。
>>124
x.exeがアクティブにならないのが正しいです。
メッセージループが止まって数秒後には応答なし状態になります。
そうなるとシステムがウィンドウの面倒を見るような気がします。
x.exeにWindowProcを作りその中でWM_KEYDOWNを処理すべきです。

137 :デフォルトの名無しさん:2006/12/20(水) 20:16:42
>>130
逆に古いOSでは使えないのは、欠点(時と場合によっては致命的)。

138 :デフォルトの名無しさん:2006/12/20(水) 20:36:36
前の人が作ったプログラム
_beginthreadの戻り値のハンドルをまったくクローズしていず、
かつ、スレッド内でnewしたものを全くdeleteしていないのですが。。。
やっぱ明示的に閉じたりdeleteしたほうがいいですよね?

139 :デフォルトの名無しさん:2006/12/20(水) 20:40:54
当たり前だ。
ATL::CHandleやboost::scoped_ptr/arrayなどは良し。

140 :デフォルトの名無しさん:2006/12/20(水) 21:12:49
>>138
> _beginthread

_beginthreadexを使え。理由はググれ。

> スレッド内でnewしたものを全くdeleteしていない

リークであればdeleteが必要。
でもなるべくauto_ptrなどで自動化しろ。

141 :デフォルトの名無しさん:2006/12/20(水) 21:23:10
そうか、_beginthreadのハンドルは閉じる必要がなかったな。すっかり忘れていた。

142 :デフォルトの名無しさん:2006/12/20(水) 21:26:36
>>140
他の人が作ったものなんで。。。

>>141
いや、exは勝手に閉じてくれるけど、無印は明示的に閉じないといかんようです

143 :デフォルトの名無しさん:2006/12/20(水) 21:39:44
_beginthread および _endthread を使用するときには、
Win32 CloseHandle API を呼び出してスレッド ハンドルを明示的に終了しないでください。

144 :123:2006/12/20(水) 21:56:44
>>132
デザイン的な理由でフレームを付けたくないのです。

>>135
>>138
すいません。自分の表現がマズかったです。
ShowWindow 等で行う、最大化・最小化は動作します。
そうではなく、ウィンドウの端をマウスで持ってウィンドウのサイズを
任意の大きさに変えることができないのです。

WS_THICKFRAMEが指定せず縁がないので、もともと動作しないものですが、
WM_NCHITTESTの戻り値を、こちらで縁上にあると指定することで同様の動作を
実現していました。

ところがWM_SYSMENUを追加すると、他は何も変更していないのに動かなくなりました。
WM_NCHITTEST上の数値などは変化していないので、戻り値がHTLEFT等の縁上であると
指定しても、ウィンドウズ側が旨く動作してくれないようなのです。


145 :デフォルトの名無しさん:2006/12/20(水) 21:57:29
うろ覚えですまんけど
_beginthread系は
crtを動的にリンクしない方がいいとか
なかったっけ

146 :デフォルトの名無しさん:2006/12/20(水) 22:03:16
CreateThreadは使うなっていうけどなんで?

147 :デフォルトの名無しさん:2006/12/20(水) 22:07:26
ダイアログボックスにエディットボックスをつけているのですが
ダイアログボックスが表示した後にエディットボックスに書ける
ようにしたいのですがどのようにすれぼいいでしょうか?

148 :デフォルトの名無しさん:2006/12/20(水) 22:09:19
>>146
crtの初期化がされないから

149 :デフォルトの名無しさん:2006/12/20(水) 22:10:19
>>146
それもAdvanced Windowsに書いてあったような気がするが、たしかこんな感じ。

_beginthreadexで作ったスレッドは、CRTの初期化・終了処理がスレッドの開始・終了時に確実に行われる。
しかしCreateThreadはそれが行われない。しかしそのスレッド内でCRTの関数を呼べば、
そのときにCRTのスレッド初期化処理が自動的に行われるが、スレッドの終了処理が行われないので、メモリリークする。
ただしCRTを動的リンクしていれば、DllMainでスレッドの終了を検地できるのでリークはしないものの、
動的リンクしたとき限定であるのでお勧めできない。

150 :デフォルトの名無しさん:2006/12/20(水) 22:16:09
CRTがそもそもわからないや
もうだめだ
おしまいだ
しぬしかない

151 :デフォルトの名無しさん:2006/12/20(水) 22:16:44
>>147
フォーカスの話か?
SetFocus

152 :デフォルトの名無しさん:2006/12/20(水) 22:21:01
>>150
MSVCRT

153 :デフォルトの名無しさん:2006/12/20(水) 22:23:23
ググッてわかる程度の質問するなよ

154 :デフォルトの名無しさん:2006/12/20(水) 22:25:22
そういえばCRTってなんの略?
common runtimeとかC runtimeとかって思ってたけどググってもぱっとしないから間違ってる?
そもそもRunTimeってのが違うか(´・ω・`)

155 :デフォルトの名無しさん:2006/12/20(水) 22:26:27
カソードレイチューブの略だよ

156 :デフォルトの名無しさん:2006/12/20(水) 22:37:05
>>155
調べたらおっしゃるとおりC runtimeでした スレ汚しすみません

157 :デフォルトの名無しさん:2006/12/20(水) 23:15:41
>>143
逆だったスマソ

158 :デフォルトの名無しさん:2006/12/20(水) 23:19:21
_beginthreadが戻り値を持てないってのは何で?
__cdeclと関係ある?

159 :デフォルトの名無しさん:2006/12/20(水) 23:26:15
一度そう決めてリリースしたから。

リリースしちゃったらコロコロ変えないのがMS流。
どこぞの糞とは違う。

160 :デフォルトの名無しさん:2006/12/20(水) 23:29:41
変なの
ちなみに_beginthreadに渡す関数が__cdeclで
_beginthreadexの場合は_stdcallなのは何で???


161 :デフォルトの名無しさん:2006/12/21(木) 00:16:16
>>160
_beginthreadに渡してた関数をそのまま渡すとエラーになるようにする為とか?

162 :デフォルトの名無しさん:2006/12/21(木) 00:20:38
>>160
CRTは原則cdeclを使っているので_beginthreadの引数の関数へのポインタもcdeclにしたのだと思う。
_beginthreadexはCreateThreadの引数に合わせて引数の関数へのポインタはstdcallにしたのだと思う。

163 :デフォルトの名無しさん:2006/12/21(木) 01:08:16
>>161, 162
なるほど納得しました

スレッドの中で確保したメモリをdeleteしないとどうなるか試したのですが、
スレッド終了すると一応開放されるみたいですね。
1000個くらいスレッド作って試しましたが、
deleteしてもしなくてもプロセスの使用メモリ量は変わりませんでした。
ハンドルは、exだと残ったまま、無印はクローズされるのも確認できました。
(スレッド作成前後で若干の差はありますが。。)
まあ、単純なプログラムだからうまく開放されたのかもしれませんが。

164 :デフォルトの名無しさん:2006/12/21(木) 01:14:42
> スレッドの中で確保したメモリをdeleteしないとどうなるか試したのですが、
> スレッド終了すると一応開放されるみたいですね。

んなアホな・・・
簡単なループまわしてみろよ

165 :デフォルトの名無しさん:2006/12/21(木) 01:27:24
>>164
本当です。下のソースで試したのですが。。
2つの注釈をとってもとらなくても、
終了時のプロセスのメモリ使用量は変わりませんでした。
(システム全体としても変わらない感じ)
コンパイラはbcc32です

#include <process.h>
#include <stdio.h>
#include <windows.h>
#include <iostream>

unsigned __stdcall threadFunc(void* p);
using namespace std;

int main(void)
{
    cin.get();
    HANDLE h[1000-1];
    for(int i=0;i<1000;i++)
    {
        h[i]=reinterpret_cast<void*>(_beginthreadex(
        (void *)NULL,(unsigned)0,threadFunc,
        (void *)NULL,0,(unsigned*)NULL));
        //CloseHandle(h[i]);
    }
    cin.get();
    return 0;
}


166 :デフォルトの名無しさん:2006/12/21(木) 01:27:56
つづき
unsigned __stdcall threadFunc(void* p)
{
    char* c=new char[1024];
    sprintf(c,"test");
    
    Sleep(5000);
    //delete[] c;
    _endthreadex(0);
    return 0;
}

167 :デフォルトの名無しさん:2006/12/21(木) 01:32:14
頭痛が痛いぜ。

(1)全体(2つのcin.get間)を1000000回ループしてみろ
(2)new char [1024]をnew char[1024*1024]にしてみろ



168 :デフォルトの名無しさん:2006/12/21(木) 01:45:48
>>167
はじめ1万回まわしてみたのですが、
どうも1000回越えるとスレッドが作成できなくなります。
abnormal programなんたらとエラーが出ます。

new char[1024*500] で試しました(1024だとエラー)

初期状態:メモリ使用量1.3MB 仮想メモリ500K
deleteしないときのメモリ使用量21M→5M 仮想メモリ520M→ 500M
したときメモリ使用量21M→6.8M 仮想メモリ520M→ 5.7M

これは相当変わりましたね。やっぱdeleteしないと全ては開放されないんですね
(しても何か残ってる気はしますが)


169 :デフォルトの名無しさん:2006/12/21(木) 01:50:18
すみません 下記が正しいです

初期状態:メモリ使用量1.3MB 仮想メモリ500K 
deleteしないときのメモリ使用量21M→11M 仮想メモリ520M→ 500M 
したときメモリ使用量21M→6.8M 仮想メモリ520M→ 5.7M 

170 :デフォルトの名無しさん:2006/12/21(木) 02:06:15
>>167
師匠と呼ばせてくれ

171 :デフォルトの名無しさん:2006/12/21(木) 02:13:03
なんで共有のヒープに作ってんのに
一部とはいえ解放されるんだ?

172 :デフォルトの名無しさん:2006/12/21(木) 02:31:50
解放はされてない
実メモリの割り当てが減っただけ

173 :デフォルトの名無しさん:2006/12/21(木) 04:43:22
馬鹿ばっかりだな。だから役に立たない本が売れるのか。

174 :デフォルトの名無しさん:2006/12/21(木) 07:13:06
ポインタを格納している変数へのポインタ(void**)って
reinterpret_castとか使ってキャストできませんかね?

例えば

::CreateDIBSection(::GetDC(0), info, DIB_RGB_COLORS, (void**)&bits, 0, 0);

という記述を

::CreateDIBSection(::GetDC(0), info, DIB_RGB_COLORS,
    reinterpret_cast<void**>(&bits), 0, 0);

のように書きたいんですが、

error C2440: 'reinterpret_cast' : 'void *const *__w64 ' から 'void **' に変換できません。

と言われてしまいます。

前者はちゃんと動くんですが、他のところはC++のキャストで統一してるんで
ここだけWin32API呼び出しのためだけにCのキャストを使うのは気持ち悪い・・・

スレ違いだったらごめんなさい

175 :デフォルトの名無しさん:2006/12/21(木) 08:46:20
const_castでconst剥がしが必要なのかな。

176 :デフォルトの名無しさん:2006/12/21(木) 09:57:50
>>173
同意

177 :174:2006/12/21(木) 11:07:07
すいません、自己解決しました。

::CreateDIBSection(::GetDC(0), info, DIB_RGB_COLORS,
    reinterpret_cast<void**>(bits), 0, 0);

でいけるようです。

178 :デフォルトの名無しさん:2006/12/21(木) 11:59:05
コンパイルが通っても動作的にダメだろ、それじゃ。

179 :136:2006/12/21(木) 13:21:26
>>123
試した結果、前言を取り消します。
WM_NCLBUTTONDOWNでSYSMENUがある場合は何かをチェックした後で
WM_SYSCOMMANDを送っていました。
SC_SIZEのフラグだけかと思ったのですが、
ウィンドウスタイルもチェックしているようです。

で、WM_NCLBUTTONDOWNで直接SC_SIZE + 方向ビットを送れば良いです。
後、WM_SETCURSORも細工必要です。

180 :123:2006/12/21(木) 16:08:23
>>179
まだ実装はしていないですが、できそうです。
ありがぞうございました!

自分は、端にカーソルがあったらWM_SETCURSORでカーソルを変更
次にドラッグされたらWM_SYSCOMMANDにSC_SIZEや方向ビットを送ることで
サイズを変更するという流れで対応させました。

181 :デフォルトの名無しさん:2006/12/21(木) 23:09:00
リッチエディットを作成する際に、"RICHEDIT" ではうまくいくのですが、
RICHEDIT_CLASS を作成すると、英数字のフォントが太くなってしまいます。
日本語はいつもの表示がされます。
MSゴシックに変えてみたりしたのですが、うまくいきません。
どうすれば、いつものフォントになるのでしょうか?
環境はVS2005Expressです

以下嫌なフォントのリッチエディット作成するソース

HMODULE hRtLib;
HWND hEdit;

/* メッセージクラッカ */
BOOL OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct)
{
hRtLib = LoadLibrary(_T("Riched20.dll"));
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, RICHEDIT_CLASS,
_T(""), WS_CHILD | WS_VISIBLE | WS_BORDER
| ES_MULTILINE | WS_HSCROLL | WS_VSCROLL
| ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_NOHIDESEL,
0, 0, 200, 200,
hwnd, (HMENU)10, lpCreateStruct->hInstance, NULL);

return (TRUE);
}


182 :デフォルトの名無しさん:2006/12/21(木) 23:44:33
メインスレッドで生成したhWndに対して、別スレッドからPostMessage()すると、
そのメッセージはメインスレッドで受け取られる?
それともPostしたスレッド??

183 :デフォルトの名無しさん:2006/12/21(木) 23:48:55
めいそすっどれ

184 :デフォルトの名無しさん:2006/12/22(金) 00:11:31
うーん、普通に考えたら、それが当たり前ですよね・・・
なんか別スレッドからPostMessageして
受け取ったウィンドウでMessageBox表示すると
MessageBoxが表示されずにモーダル状態になって
ウィンドウが固まっちゃう現象に悩んでます・・・

185 :デフォルトの名無しさん:2006/12/22(金) 00:16:20
デッドロックしてるんだろ。排他処理している部分を見直す!

186 :デフォルトの名無しさん:2006/12/22(金) 00:28:25
>>134
FILE_FLAG_OVERLAPPED付きでCreatePipeできるの?

187 :デフォルトの名無しさん:2006/12/22(金) 00:50:09
数百バイトのヘッダに数ギガバイトのデータがくっ付いたバイナリファイルがあります。
ここからヘッダを素早く取り除く方法はありますか?

188 :デフォルトの名無しさん:2006/12/22(金) 00:53:01
ない

189 :181:2006/12/22(金) 01:55:24
調べが足りませんでした。
問題の英数のフォント名 Arial で検索したところ、解決しました。

LONG LangOptions;
LangOptions = SendMessage(hEdit, EM_GETLANGOPTIONS, 0, 0);
LangOptions &= ~IMF_DUALFONT;
SendMessage(hEdit, EM_SETLANGOPTIONS, 0, (LPARAM)LangOptions);

これで期待通りの動作をしてくれました。


190 :デフォルトの名無しさん:2006/12/22(金) 05:35:08
すみません質問があります。
SHELL32.DLLにスマートメディアなどの(ドライブ関係)アイコンがはいっているみたいなのですが、
はいっていませんでした。
ドライブ関係のアイコンどこにあるか教えてください。
VAIO WIndowsXPを使用しています

191 :デフォルトの名無しさん:2006/12/22(金) 07:40:15
リソースにバージョンがありますが、
このリソースに書いた情報を、プログラムから読むにはどうしたらいいんでしょうか?

192 :デフォルトの名無しさん:2006/12/22(金) 10:28:33
バージョン限定でいいなら GetFileVersionInfo()

193 :デフォルトの名無しさん:2006/12/22(金) 16:54:39
>>190
SHELL32.DLLに入っている。

194 :デフォルトの名無しさん:2006/12/22(金) 18:38:19
>>184
Postされた側スレッドがメッセージキュー処理できる状態になるまで
Postした側のスレッドはブロックされるよ。

WindowMessage を喰う WNDPROC 内で WaitFor..Object とか CRITICALSECTION で
排他かけると、その罠にかかることがあるから注意汁

Win32API質問箱 Build46
http://pc8.2ch.net/test/read.cgi/tech/1159158014/374-379

195 :デフォルトの名無しさん:2006/12/22(金) 18:49:36
>>194
postは大丈夫だよ

196 :デフォルトの名無しさん:2006/12/22(金) 18:51:04
>>195
すまねえ… post だと投げる側は即座に処理戻ってこれるな。

197 :デフォルトの名無しさん:2006/12/22(金) 19:16:27
SetWindowText() なんかも最終的には SendMessage に還元されるから
排他処理には気をつかう…

198 :デフォルトの名無しさん:2006/12/22(金) 20:58:42
SendMessageCallbackやSendNotifyMessageなど、
PostとSendの間くらいのものもある。

199 :デフォルトの名無しさん:2006/12/22(金) 23:52:12
メニューの選択肢に'&'という文字を出すにはどうすればいいんですか?

200 :デフォルトの名無しさん:2006/12/22(金) 23:59:29
>>199
&&で&

201 :デフォルトの名無しさん:2006/12/23(土) 01:15:44
zip の圧縮、伸張をするにはどうすればよかですか?

202 :デフォルトの名無しさん:2006/12/23(土) 01:36:49
>>201
unzip32.dll

203 :デフォルトの名無しさん:2006/12/23(土) 01:44:57
MCIでmpg動画を再生したいのですが、音声だけ流れて映像がでてきません。何がいけないのでしょうか。
static MCI_PLAY_PARMS mpp;
static MCI_ANIM_OPEN_PARMS mop;
mop.dwCallback = (DWORD)hw;
mop.lpstrElementName = OPENING_MOVIE;
mop.dwStyle = WS_CHILD | WS_VISIBLE;
mop.hWndParent = hw;

iErr = mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT |
MCI_ANIM_OPEN_PARENT | MCI_ANIM_OPEN_WS,
(DWORD)&mop
);
if(iErr){
mciGetErrorString(iErr,err,lstrlen(err));
MessageBox(hw,err,NULL,MB_OK);
return -1;
}

mpp.dwCallback = (DWORD)hw;
mciSendCommand(mop.wDeviceID, MCI_PLAY, 0, (DWORD)&mpp);

204 :デフォルトの名無しさん:2006/12/23(土) 01:47:02
hwはメインウィンドウのHWND、OPENING_MOVIEはmpg動画ファイルのアドレスのマクロです

205 :デフォルトの名無しさん:2006/12/23(土) 03:16:43
>>193
だけど、エクスプローラで表示しているかっこいいドライブアイコン
はなかったです、古いドライブアイコンならありますた。


206 :デフォルトの名無しさん:2006/12/23(土) 03:26:09
>>205
ショートカットの「アイコンの変更」でshell32.dllのアイコンを覗いてみろ。

207 :デフォルトの名無しさん:2006/12/23(土) 04:02:42
あー、店頭でVAIO覗いてみたことがあるけど、
確か見たことも無いアイコンが使われていた記憶がある
もしかしてVAIO独自のを用意しているのがあるんじゃないかな?

ショートカット作成→アイコン変更でみれるか忘れたが、
見れないようならIconSetXPとかで見れるはず

208 :デフォルトの名無しさん:2006/12/23(土) 06:55:23
>>206 >>207
ありがとうございました(^0^)。IconSetXPで見るとありました。
どうやらWIN95時代のアイコン一覧のフリーソフトつかってたから
全部のアイコン一覧がでてこなかったかも??

で、GetDriveType()ではフラッシュとかメモリースティックとかまで
わからないけど、みんなどうやって判別するんですか?

209 :デフォルトの名無しさん:2006/12/23(土) 10:47:49
ひとつのウインドウに複数のホットキーを登録することはできるのでしょうか?


210 :デフォルトの名無しさん:2006/12/23(土) 12:28:30
ローカルに超簡易HTTPサーバーを建てるプログラムを作りたいのですが
どこから手を付けて良いの変わりません・・・
機能的には、ポート指定ができて、そのサーバーのdocumentroot配下の
テキストファイルがブラウザから見られる程度で良いのですが・・・

211 :デフォルトの名無しさん:2006/12/23(土) 12:30:21
スレ違い

212 :デフォルトの名無しさん:2006/12/23(土) 12:47:03
>>210
C#のサンプルにそういうのがあったと思うよ
あとスレ違い

213 :デフォルトの名無しさん:2006/12/23(土) 12:58:37
>>210
どこぞのウィルスに感染するといいと思うよ
あとスレ違い

214 :デフォルトの名無しさん:2006/12/23(土) 12:59:43
GetPrivateProfileIntで

0x004000AA

とかのアドレスを取得したいんですが
AAの16進が文字列として認識されて取得できません。

こういう場合どうすればいいんでしょうか

;ini例
[ADDRESS]
Addr=004000AA


215 :デフォルトの名無しさん:2006/12/23(土) 13:11:11
レジストリに書き込んだやつに聞けよ

216 :デフォルトの名無しさん:2006/12/23(土) 13:11:35
GetPrivateProfileStringで取得してstrtolで変換

217 :214:2006/12/23(土) 13:12:27
ありがとうございます。

218 :デフォルトの名無しさん:2006/12/23(土) 13:14:39
API風にいうとStrToIntExじゃね?普通

219 :デフォルトの名無しさん:2006/12/23(土) 13:15:00
8進か

220 :デフォルトの名無しさん:2006/12/23(土) 13:19:03
16進だろw

221 :デフォルトの名無しさん:2006/12/23(土) 13:29:20
>>218
0xが付いてないと(つまり>>214の形式だと)16進数は変換できなくね?
strtolなら第三引数で指定できる。まあ確かにスレ違いだけど
GetPrivateProfileStringも紹介してるってことで勘弁してちょ

222 :デフォルトの名無しさん:2006/12/23(土) 13:33:55
レジストリに書き込んだやつがアホ

223 :デフォルトの名無しさん:2006/12/23(土) 13:48:54
2度も書いてるけど>>214へのレス?
GetPrivateProfileIntはiniから読み取るAPIだけどレジストリと何の関係があるの?

224 :デフォルトの名無しさん:2006/12/23(土) 14:18:55
個人的にレジストリ使うの嫌だけどな俺は
ヘビーユーザの立場から見るとレジストリ弄られるのは気持ち良くない
だったらini管理に俺はするんだが

225 :デフォルトの名無しさん:2006/12/23(土) 14:24:59
日本語が不自由なら帰れよ

226 :デフォルトの名無しさん:2006/12/23(土) 14:27:50
>>224
だからレジストリの話なんて誰もしてないだろって

227 :デフォルトの名無しさん:2006/12/23(土) 14:29:18
逆にこう考えるんだ

2つの話題が交錯しているだけ、と

228 :デフォルトの名無しさん:2006/12/23(土) 14:34:05
GetPrivateProfileInt の検索結果 約 17,300 件中 1 - 10 件目 (0.12 秒)

GetPrivateProfileIntGetPrivateProfileInt 関数は、大文字と小文字を区別しません。
lpAppName と lpKeyName の各パラメータが指す文字列では、大文字と小文字の ...
このような状況では、GetPrivateProfileInt 関数は .ini ファイルではなくレジストリから情報を取得します。 ...
msdn.microsoft.com/library/ja/jpsysinf/html/_win32_getprivateprofileint.asp?frame=true - 17k -
キャッシュ - 関連ページ

229 :デフォルトの名無しさん:2006/12/23(土) 14:55:42
>>228
>>214
>;ini例


230 :デフォルトの名無しさん:2006/12/23(土) 15:05:07
そんなくだらないことに執着するのは、アホといわれてよっぽどくやしかったんだな

231 :デフォルトの名無しさん:2006/12/23(土) 15:06:24
Addr=0x004000AAだったら、GetPrivateProfileIntで直接読めるよ。

232 :デフォルトの名無しさん:2006/12/23(土) 15:23:13
簡単なテキスト処理すら自分でできないやつが多いな

233 :デフォルトの名無しさん:2006/12/23(土) 15:25:02
再利用した方が読む側もわかりやすいだろ?
無能ニートは糞ひって寝てろ

234 :デフォルトの名無しさん:2006/12/23(土) 15:31:49
自称ヘビーユーザーはお帰りください

235 :デフォルトの名無しさん:2006/12/23(土) 15:32:00
GetPrivateProfileIntで直接読めるようになってればいいだけだな

236 :233:2006/12/23(土) 16:37:31
ごめん。
言い過ぎた。

237 :デフォルトの名無しさん:2006/12/23(土) 17:38:14
mciで音声再生するデバイスをプライマリ以外に選べますでしょうか?

DirectSoundだとDirectSoundEnumerateで繋がってるサウンドカードの
一覧が取得できるのですが、mciではやり方が見つけられませんでした。

知ってる方居たらお願いします。


238 :201:2006/12/23(土) 20:00:38
WinXP以降ではシステムでZIPの伸張・圧縮がサポートされているかと思い、
それに伴うAPI]が提供されているかと考えていたのですが、、、、
そうでもないのでしょうか?

APIがあるなら 伸張する関数名 。
APIがないなら ない とお答え頂ければ幸いです。

239 :デフォルトの名無しさん:2006/12/23(土) 20:11:50
”無い”を証明するのは不可能に等しい by 悪魔の証明

240 :デフォルトの名無しさん:2006/12/23(土) 20:16:50
zipfldr.dll
RouteTheCall

241 :デフォルトの名無しさん:2006/12/23(土) 23:15:05
>>238
ない。

242 :デフォルトの名無しさん:2006/12/23(土) 23:21:16
>>238
何かかっこいい名前のライブラリだったような気がするけど、
忘れた。
その代わりと言っちゃなんだが、シェル方面からアプローチしたら
行けるんじゃないか?

243 :242:2006/12/23(土) 23:27:59
あ、>>240が書いてくれてるじゃん。

244 :デフォルトの名無しさん:2006/12/23(土) 23:41:25
zipfldr.dllはCOMコンポーネントなので普通に使えるはずだろう


245 :デフォルトの名無しさん:2006/12/23(土) 23:44:53
(´-`).。oO(つーか無難にzlibとか使えよ・・・・・・・・・)

246 :デフォルトの名無しさん:2006/12/24(日) 00:05:29
確かにzlibとか選択肢はあるけど、セキュリティホールが出た場合
WindowsUpdateと言う手段が無いだろ。
流石にお客に「自前でzlib調達してなんとかしる」なんて言えねー。


247 :デフォルトの名無しさん:2006/12/24(日) 00:40:47
zlibとかをアプリに同梱すれば何の問題もないだろ

248 :デフォルトの名無しさん:2006/12/24(日) 00:54:24
VisualStudio の入力候補リストみたいに、
ウィンドウ外にも描画されるリストはどのように作成するのでしょうか?
普通に親ウィンドウを指定してリストを作成すると、
ウィンドウ内に描画され、はみ出た場合スクロールしなければいけなくなります。


+-------------+
|           |
|          |
|  +-----+   |
|  |リスト |   |
+-------------+
今のままでは、スクロールしなければいけいない


+-------------+
|          |
|          |
|  +-----+   |
|  |リスト |   |
+--|     |---+
  .|     |
  +------+
VSはウィンドウの外にリストが表示される


249 :デフォルトの名無しさん:2006/12/24(日) 01:08:53
>>248
分からんけどVSは独自にウィンドウ出してるだけじゃないかなあ。
何使ってるかSPYで調べてみたらいいんじゃない。

250 :デフォルトの名無しさん:2006/12/24(日) 01:10:53
只の Owned Window では無いの?

251 :デフォルトの名無しさん:2006/12/24(日) 01:13:58
>>248
VsCompletorPaneっていうクラス名のウィンドウを出してる。確認してみよ。

252 :デフォルトの名無しさん:2006/12/24(日) 01:51:47
>>238
シェル名前空間を通せば普通のフォルダと同じように扱える。
http://pc8.2ch.net/test/read.cgi/tech/1124559962/252-253

253 :248:2006/12/24(日) 01:59:34
いろいろ試してみます。
ありがとうございました。

254 :199:2006/12/24(日) 02:36:41
ありがとうございました。

255 :デフォルトの名無しさん:2006/12/24(日) 02:44:18
スレッドが実行中かどうか調べられるAPIありますか?

SuspendThreadやResumeThreadの戻り値であるサスペンドカウントを
スレッドの状態を変えることなく調べたいです

256 :201:2006/12/24(日) 04:09:58
zipfldr.dll は使い方がよくわからなかったので
zlib を使うことにしました。
お答え頂いた方々、ありがとうございました。

257 :デフォルトの名無しさん:2006/12/24(日) 04:14:38
>>255
WaitForSingleObject

258 :デフォルトの名無しさん:2006/12/24(日) 04:27:47
>>257
WaitForSingleObjectはスレッドが終了したかどうかの判定には使えるけど
実行中か一時停止中(SuspendThreadなどによる)かの判定には使えない希ガス

259 :デフォルトの名無しさん:2006/12/24(日) 08:57:25
>>255
http://pc8.2ch.net/test/read.cgi/tech/1157814833/38

260 :デフォルトの名無しさん:2006/12/24(日) 12:04:02
( ´,_ゝ`)プッ ねーのかよ

261 :デフォルトの名無しさん:2006/12/24(日) 12:20:26
そうすると.netのSystem.Threading.Thread.ThreadStateはどうやって提供されてるんだ?
秘蔵のAPIってやつ?

262 :デフォルトの名無しさん:2006/12/24(日) 12:27:45
>>261
自分でカウントしてんじゃねーの?

263 :デフォルトの名無しさん:2006/12/24(日) 14:00:29
CSliderCtrlでスライダーのページエリア(?)をクリックするとページサイズだけそちらに移動しますよね?
そうじゃなくてクリックした位置にジャンプして欲しいのですが、どのようにやったらよいか教えていただけますか?
よろしくお願いします

264 :255:2006/12/24(日) 14:36:41
GetThreadContextって関数の説明に

You cannot get a valid context for a running thread.
Use the SuspendThread function to suspend the thread before calling GetThreadContext.

って書いてあってこれを利用したらいけるかと思ったらSuspendThread呼び出さなくても成功しちゃってるorz

265 :デフォルトの名無しさん:2006/12/24(日) 14:52:00
1CPUだったら必ず成功する気がせんでもない

266 :デフォルトの名無しさん:2006/12/24(日) 15:00:04
アプリケーション自身がアクティブかどうかって、どうやって判断するんだっけ・・・

267 :デフォルトの名無しさん:2006/12/24(日) 16:01:20
BOOL __stdcall AmIActive?(void)

268 :デフォルトの名無しさん:2006/12/24(日) 16:15:39
>>263
やったことないが、pageup/downが来たらマウスの位置調べてthumbtrack投げなおすとかどう?

269 :デフォルトの名無しさん:2006/12/24(日) 16:38:41
>>266
(1)フォアグラウンドウィンドウが自プロセスのものかどうかを見る
(2)WM_ACTIVATEAPPだかなんだかを拾う
のどちらかじゃねえかな
他に簡単な手があったら教えて

270 :266:2006/12/24(日) 16:46:03
これでできたっぽいっす
GetActiveWindow() == GetTopLevelWindow(hWnd)

271 :デフォルトの名無しさん:2006/12/24(日) 16:49:32
いまだに__stdcallの意味が理解できない俺

272 :デフォルトの名無しさん:2006/12/24(日) 17:32:45
おれも

273 :デフォルトの名無しさん:2006/12/24(日) 17:59:57
じゃあ __pascal と __cdecl はわかるのか

274 :271:2006/12/24(日) 18:26:54
わからないぜw
ただpascalは16ビット時代のなんちゃらって記憶がかすかに
cdeclはランタイムライブラリ?

わかんねwwwwwwww

275 :271:2006/12/24(日) 18:27:29
クリスマスに俺何してんだろうなorz

276 :デフォルトの名無しさん:2006/12/24(日) 18:44:13
>>274
引数の積み方と後処理をどっちでやるか、という話

277 :255:2006/12/24(日) 18:51:14
GetThreadTimesって関数見つけたんですけどSleep(0)くらいじゃ変化なしorz
bool is_run(HANDLE h) {
 FILETIME create, exit, kernel1, kernel2, user;
 GetThreadTimes(h, &create, &exit, &kernel1, &user);
 Sleep(0);
 GetThreadTimes(h, &create, &exit, &kernel2, &user);
 returnkernel1.dwLowDateTime != kernel2.dwLowDateTime ||
     kernel1.dwHighDateTime!=kernel2.dwHighDateTime;
}

278 :デフォルトの名無しさん:2006/12/24(日) 19:01:56
手段が目的に変わりつつある予感。
サスペンドカウントを調べたい理由って何?

279 :255:2006/12/24(日) 19:07:11
>>278
プロセスのHANDLEをラップしたクラスを作ってます

280 :デフォルトの名無しさん:2006/12/24(日) 19:22:55
>>279
理由になってねー

281 :デフォルトの名無しさん:2006/12/24(日) 20:49:27
>>279
だからなんでそんなのを作ってんだよって話なわけだが。

282 :255:2006/12/24(日) 20:50:51
ビールスを作ってます

283 :デフォルトの名無しさん:2006/12/24(日) 21:00:21
>>264
ヒント: valid

284 :デフォルトの名無しさん:2006/12/25(月) 01:43:19
>271
呼出規約でぐぐれ
パラメータの渡し方とスタックのクリーンアップの責任の所在

285 :デフォルトの名無しさん:2006/12/25(月) 02:08:36
>>268
ありがとうございます。
やってみます。


286 :デフォルトの名無しさん:2006/12/25(月) 02:29:35
>271
シグネチャの不一致を利用した地味で効果的な嫌がらせ

287 :デフォルトの名無しさん:2006/12/25(月) 02:35:04
ごちゃごちゃ言ってるとNearポインタ&Farポインタ復活さすぞ!

288 :デフォルトの名無しさん:2006/12/25(月) 02:46:49
ごめんなさいもうしないので許して

289 :デフォルトの名無しさん:2006/12/25(月) 13:07:01
変声機を作りたいのですが、どなたかそれに関しての良いAPIを知っていますでしょうか。

290 :デフォルトの名無しさん:2006/12/25(月) 13:54:46
APIつーか、SDKのサンプルに無かったっけ

291 :デフォルトの名無しさん:2006/12/25(月) 14:40:24
なんちゃってエクスプローラを作るのですが、
普通のエクスプローラの様に、

デスクトップ
 マイ ドキュメント
 マイ コンピュータ
  A:
  C:
  H:
  コントロール パネル
 マイ ネットワーク
 ゴミ箱
  :

のリストを列挙する関数とかあります?
あるなら、その関数名を教えてください・・・

292 :デフォルトの名無しさん:2006/12/25(月) 15:31:32
SHGetDesktopFolder
名前の通りデスクトップ(へのインタフェース)を返す。

293 :デフォルトの名無しさん:2006/12/25(月) 17:33:23
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/namespace.asp
これもよく読んどくといいよ

294 :291:2006/12/25(月) 18:26:27
>>292
>>293
どうもありがとうございます!
調査していきます。

295 :デフォルトの名無しさん:2006/12/25(月) 23:45:16
x64では呼び出し規約が統一されてめでたい限り。
というかもともとx86以外は1つしかないんだけど(x86のみ過去とのしがらみで
ごちゃごちゃあった)

296 :124:2006/12/26(火) 00:58:00
ええと、ヘンなコードだったかもしれないですが
EnableWindowはそれほど関係なかったみたいです。

x.cをこういうのにしてみたら、結局同じような現象が起きます。
ただ、戻ってきてもディスエーブルされなくなりましたが・・・
WaitForSingleObjectの間にシステムから
ウィンドウプロシージャが呼び出されてるのか、と思って
チェック用のBeepを入れてみたんですが鳴りません。

少し時間を置いた時にディスエーブルになる、
というが何とも不思議・・・

システムが2つのウィンドウが同時にイネーブルにならないように
定期的にチェックしているのだろうか?

<<x.c>>
#include <windows.h>

void execute(HWND hwnd){
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    CreateProcessA(NULL, "C:\\DATA\\PROG\\WIN32\\ディスエーブル\\msgbox.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    WaitForSingleObject(pi.hProcess, INFINITE);
}

LRESULT CALLBACK MyWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
    LRESULT lr;
    Beep(200, 100);
    lr = DefWindowProcA(hWnd, uMsg, wParam, lParam);
    return lr;

297 :124:2006/12/26(火) 00:59:07
124
#pragma argsused
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE b, LPSTR c, int d){
    WNDCLASSA wc;
    HWND hWndMain;
    MSG msg;

    ZeroMemory(&wc, sizeof(wc));
    wc.lpfnWndProc = MyWindowProc;
    wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
    wc.lpszClassName = "MyClass";
    RegisterClassA(&wc);
    hWndMain = CreateWindowExA(0, "MyClass", "", WS_VISIBLE | WS_SYSMENU, 0, 0, 100, 100, NULL, NULL, hInstance, NULL);
    for(;;){
        if (!IsWindow(hWndMain)){
            break;
        }
        GetMessageA(&msg, NULL, 0, -1);
        TranslateMessage(&msg);
        DispatchMessageA(&msg);
        if (msg.message == WM_KEYDOWN){
            if (msg.wParam == VK_RETURN){
                execute(hWndMain);
            }
        }
    }
    return 0;
}

298 :デフォルトの名無しさん:2006/12/26(火) 01:04:26
>ディスエーブル
>イネーブル

それはギャグで言っているのか。

299 :デフォルトの名無しさん:2006/12/26(火) 01:06:52
ほんとはなんて読むの?

300 :デフォルトの名無しさん:2006/12/26(火) 01:07:29
エナブレ
ディサブレ

301 :デフォルトの名無しさん:2006/12/26(火) 01:24:05
ディスエーブル、イネーブルであってるぞ?


302 :デフォルトの名無しさん:2006/12/26(火) 01:26:52
カタカナに直すより原語表記か和訳の方が*俺*は見やすい。

303 :デフォルトの名無しさん:2006/12/26(火) 01:32:42
メッセージループを止めた状態をディスエイブルとは呼ばない。

304 :デフォルトの名無しさん:2006/12/26(火) 02:42:16
タスクマネジャで状態を監視し、応答なしの場合、
他のアプリケーションウィンドウをかぶせてぐりぐりしてみる。
 -->フレームが再描画描されるならゴーストが出来ている

305 :デフォルトの名無しさん:2006/12/26(火) 03:43:41
いねぼー
ディせーぼー


306 :デフォルトの名無しさん:2006/12/26(火) 05:55:57
最近、マウスをダブルクリックするとパソコンから猫の鳴き声
みたいなのが聞こえてきます(キッキッみたいな感じ)
猫の鳴き声を消すAPI教えてください

307 :デフォルトの名無しさん:2006/12/26(火) 07:29:49
ニャー

308 :デフォルトの名無しさん:2006/12/26(火) 09:33:52
ディセーブルキャットサウンド(フォールス);

309 :デフォルトの名無しさん:2006/12/26(火) 10:21:56
>>306
ExitWindowsEx(EWX_POWEROFF, 0)

310 :デフォルトの名無しさん:2006/12/26(火) 10:47:58
KillCats( lpCATS );

311 :デフォルトの名無しさん:2006/12/26(火) 11:12:55
case WM_KILLCATS:
/* :P */
return (0);


312 :デフォルトの名無しさん:2006/12/26(火) 11:15:58
>>308
ディセーーーーブルをファルセだと有効になるにゃん


313 :デフォルトの名無しさん:2006/12/26(火) 14:33:11
CDからCD-TEXTを読み出す方法を教えてください
Win32APIでできませんか?

314 :デフォルトの名無しさん:2006/12/26(火) 14:37:18
できる

315 :デフォルトの名無しさん:2006/12/26(火) 15:07:17
どうやって?

316 :デフォルトの名無しさん:2006/12/26(火) 15:37:19
ググレ

317 :デフォルトの名無しさん:2006/12/26(火) 15:44:33
質問するとこなんだから、知ってるんなら答えてやればいいじゃん
俺ぁ知らんけど

318 :デフォルトの名無しさん:2006/12/26(火) 17:03:44
>>317
>>1

319 :デフォルトの名無しさん:2006/12/26(火) 17:22:07
普通に↓とかでは。
fopen("E\hoge.txt", "r");

320 :デフォルトの名無しさん:2006/12/26(火) 17:23:20
>>319
ちょwwwCD-TEXTの意味わかってるかwww
気になったからググって見たが「CD-TEXT API」だのじゃそれらしい情報も見当たらんなぁ

321 :デフォルトの名無しさん:2006/12/26(火) 17:38:45
red book

322 :デフォルトの名無しさん:2006/12/26(火) 17:39:15
ドライブによって読めたり読めなかったりするとこみると
ASPIドライバ直接呼ぶんじゃね?

323 :デフォルトの名無しさん:2006/12/26(火) 17:42:23
ぶっちゃけ>>1に書いてある通りにすれば20秒で見つかる件について

324 :デフォルトの名無しさん:2006/12/26(火) 17:45:19
なんだよAPIドライバってw

325 :デフォルトの名無しさん:2006/12/26(火) 17:47:52
>>324

326 :デフォルトの名無しさん:2006/12/26(火) 17:52:11
>>324

327 :デフォルトの名無しさん:2006/12/26(火) 17:53:00
>>324

328 :デフォルトの名無しさん:2006/12/26(火) 18:03:32
>>324

329 :デフォルトの名無しさん:2006/12/26(火) 18:04:39
>>313
DeviceIoControlを使え。

それ以上はWin32apiでは無いので。


330 :デフォルトの名無しさん:2006/12/26(火) 18:05:44
何でもクラス化するのが好きな俺ですがウィンドウシステムを
サブクラス化するときにSetWindowLongにメンバ関数をいれる
ことが出来なくなってしまいました。?

331 :デフォルトの名無しさん:2006/12/26(火) 18:12:32
エスパーの方出番です

332 :デフォルトの名無しさん:2006/12/26(火) 18:14:15
>>324には今年一番ワロタ

>>331
無理www

333 :エスパー:2006/12/26(火) 18:30:41
>>330
???
staticメンバ関数(静的メンバ関数)にしてみれば?
http://techtips.belution.com/ja/vc/0009/

334 :デフォルトの名無しさん:2006/12/26(火) 18:38:57
使用しているPCが。Windows日本語版かどうかを判別することはできますでしょうか?
VC++6.0です。


335 :デフォルトの名無しさん:2006/12/26(火) 19:08:38
>>334
何を要求しているかわからないけど、
GetSystemDefaultLangIDとかじゃだめ?

LCIDを求めるんじゃなく?

336 :330:2006/12/26(火) 20:15:45
>>333
それです!。
私の文が読みにくかったけど答えてくれてありがとうございます!!。

337 :デフォルトの名無しさん:2006/12/26(火) 21:42:38
SDKのプログラミングでグリッドコントロール(読み取り専用でよい)を使うにはどうすればいいですか?
リストビューを使うのでしょうか?

XP、VC6


338 :デフォルトの名無しさん:2006/12/26(火) 21:53:14
はい

339 :デフォルトの名無しさん:2006/12/26(火) 21:56:19
他にはそういったコントロールは用意されていないのでしょうか?

340 :デフォルトの名無しさん:2006/12/26(火) 21:58:04
1. リストビュー
2. Excelワークシート
3. 自作

341 :デフォルトの名無しさん:2006/12/26(火) 22:01:09
やはりリストビューですか。自作できるほどのスキルはありませんし。
MSFlexGridというのはVB用ですか?

342 :デフォルトの名無しさん:2006/12/26(火) 22:06:38
技術的にはVC++でも使えるはず。
ライセンスがどうなっているか俺は知らないから、適当に調べてくれ。

343 :デフォルトの名無しさん:2006/12/26(火) 22:17:56
ダイアログエディタでMsFlexGridを貼り付けるところまでは出来ました。
実行すると表示されませんけど。

344 :デフォルトの名無しさん:2006/12/26(火) 22:30:32
やっぱりリストビューでなんとか頑張ります

345 :デフォルトの名無しさん:2006/12/26(火) 22:48:45
>>344
MFCスレで、CListCtrlをレポート形式で扱う方法を質問したほうがいいかもね。

346 :デフォルトの名無しさん:2006/12/26(火) 22:51:27
>>345
>>337
>SDKのプログラミングで

347 :デフォルトの名無しさん:2006/12/26(火) 23:14:03
MFC(笑)

348 :デフォルトの名無しさん:2006/12/27(水) 00:37:02
VS2005でのMFCへの対応を見ると笑われてもしょうがない気がするけど
作るのに最低一ヶ月は要するようなWindowsアプリを作る場合、みんな
どのライブラリ使ってるの?

349 :デフォルトの名無しさん:2006/12/27(水) 00:40:56
>>348
UIなら、WTLを使ってます。MFCは今更使わないです。

350 :デフォルトの名無しさん:2006/12/27(水) 01:01:13
おれ描画能力とかいらんアプリしかつくんないからC#でつくる。

351 :デフォルトの名無しさん:2006/12/27(水) 02:06:21
open source に dot netですか。
ぐぐってちょっとソース見た限りMFCと似てる気がするけど、ちょっとWTLで遊んでみるね。
ありがとう >349-350

352 :デフォルトの名無しさん:2006/12/27(水) 09:19:33
GDI+で日本語のOpenTypeフォントは使えないんですか?
まさか流石にそんなことないと思いますが、自分の環境だと使えなかったので、質問してみます。

353 :334:2006/12/27(水) 11:04:57
>>335
言語IDを取得できました。
ありがとうございました。


354 :デフォルトの名無しさん:2006/12/27(水) 11:20:54
>>352
Font名を指定するタイプのコンストラクタを使うと
でたらめのフォントを作って平然としてるっぽい。

LOGFONTを受け取る方のコンストラクタに、GDIで作った
Fontから取り出したLOGFONT構造体を渡してみたら
TrueTypeじゃないというエラーになった。
駄目なのかもね。

355 :デフォルトの名無しさん:2006/12/27(水) 11:40:14
>>352
FontFamily::GetFamilies でも OpenTypeのフォントは出てこないな。


356 :306:2006/12/27(水) 11:49:17
>>307-3012
ありがとうございました。ドライバーで本体を分解したところ
子猫がでてきました。解決しました

357 :デフォルトの名無しさん:2006/12/27(水) 12:00:33
>>3012に期待

358 :デフォルトの名無しさん:2006/12/27(水) 12:02:12
>>3012期待してるぞ

359 :デフォルトの名無しさん:2006/12/27(水) 12:15:39
(´Д`;)無理

360 :3012:2006/12/27(水) 13:08:19
呼んだ?

361 :デフォルトの名無しさん:2006/12/27(水) 14:19:32
先生方に質問です!

デスクトップなどから(マウスクリックなど普通の方法で)アプリケーションを起動するとき、
WinXPだとAPIフックで、explorer.exeからCreateProcess(W)が呼ばれているのが検知できますが、
Win2Kだと同じコードでも監視に引っかかりません。

madCodeHookライブラリのサンプルではWinExecとCreateProcessで監視に成功しているようなので、
呼ばれていないわけではないと思うのですが、
Win2Kでプロセスの起動を監視するのはXpとは違う細工が必要なんでしょうか?
(2kはVMPlayer上ですけど権限は両方adminで、MessageBoxなどはちゃんと検知出来てます)

362 :デフォルトの名無しさん:2006/12/27(水) 15:49:06
APIってバッファのサイズを指定しないといけないのが
いっぱいありますけど、あれはなんで必要なんでしょうか?
自分で関数作るときにはやったことないんですが。

363 :デフォルトの名無しさん:2006/12/27(水) 15:52:10
ばっふぁおーばーふろーしたらこまるでしょ

364 :デフォルトの名無しさん:2006/12/27(水) 15:58:46
パターン1 引数に大きさを渡すやつ
 APIを呼ぶ言語が C/C++ とは限らないから。

パターン2 構造体に構造体の大きさを必要とするメンバを持つやつ
 構造体サイズでバージョン分けするトリックをかますため。

365 :デフォルトの名無しさん:2006/12/27(水) 16:04:09
配列.lengthが使えるって便利だよな

366 :デフォルトの名無しさん:2006/12/27(水) 16:32:09
その場合、配列.num[i]とかやらなくても大丈夫?

367 :デフォルトの名無しさん:2006/12/27(水) 17:20:27
>>364
1の場合は、むしろCのため。
C++ならどうにでもできるが、どうにもしていない(== Cとして使っている)やつも多いと思う。

368 :364:2006/12/27(水) 17:25:14
>>367
ごめん そのとおりだわ。

APIは呼ばれる言語が確定的でないから、できる限り低級な言語で呼び出せるように設計されている
+ばっふぁおーばーふろー対策
ってことだね

369 :デフォルトの名無しさん:2006/12/27(水) 19:21:47
べんきょうになるなぁ

370 :デフォルトの名無しさん:2006/12/27(水) 19:48:31
質問させてください。
Overlappedを使った(非同期?重複?)なI/Oを使う場合、
メモリ上にどんどんリクエストがキューイングされていって、
バックグラウンドで逐次実行されている、みたいな感じで理解しているのですが、
これで正しいのでしょうか?
処理の完了を気にせず、ボコボコ連続でWriteFile()なんかをしても
OSが後で仕事しといてくれる、みたいな。

371 :デフォルトの名無しさん:2006/12/27(水) 21:43:28
>>370
おりはそう認識してる。

DebugViewでトレースできるんだっけ?

372 :デフォルトの名無しさん:2006/12/27(水) 22:13:26
> でたらめのフォントを作って平然としてるっぽい。
CreateFontの仕様そのまんまなのか
> 処理の完了を気にせず、ボコボコ連続でWriteFile()なんかをしても
前の完了は待たないとエラーが起きたとか一部しか書けなかった場合に
まずいんじゃ?

373 :デフォルトの名無しさん:2006/12/27(水) 22:32:11
ものすごーく初歩的なことだろうと思うのですが、
ダイアログにIDOKという名前のボタンがあって
これのハンドルを取得するにはどうすればいいんでしょうか?

VC++ & SDK

374 :デフォルトの名無しさん:2006/12/27(水) 22:47:15
>>373
この中に答えがあるよ。
ttp://msdn2.microsoft.com/en-us/library/ms644994.aspx
ttp://msdn2.microsoft.com/en-us/library/ms644995.aspx

375 :デフォルトの名無しさん:2006/12/27(水) 22:54:23
>>374
異国の言葉で書かれていて読めません

376 :デフォルトの名無しさん:2006/12/27(水) 22:58:33
>>375
だからなに?

377 :デフォルトの名無しさん:2006/12/27(水) 23:05:58
英語読めない奴はプログラマ辞めちまえ

378 :デフォルトの名無しさん:2006/12/27(水) 23:09:53
>>371
レスどうもです。トレースの話は初耳かもしれません。

>>372
確かにそうなんですが、そもそも「リクエストを溜めてくれるのか」が
いまいちハッキリしなかったもので…

どうせなら非同期処理を頼んだ時の成否で判断、ぐらい楽したいですね。
渡した送信バッファ消しちゃったりした時にえらいことになるんでしょうけど。

379 :デフォルトの名無しさん:2006/12/28(木) 01:39:11
>>352
OpenTypeフォントにもアウトライン情報がTrueTypeベースな物とPostScriptベースな物があり、
GDI+でサポートされるのは前者だけのようだ。
Office2003あたりについてくるHG正楷書-Proとかが前者のフォント (Office 2000に付いてくるのは
ただのTrueTypeフォントなので話が違う)

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_1wmq.asp
にも「ClearType antialiasing は TrueTypeフォントかTrueTypeアウトラインなOpenTypeフォントでしか
効かない」と書かれてるし、「WindowsはOpenTypeをサポートしてます」と言ってる割に、
全然ダメなんじゃねーのという感じだな。たぶんGDIのGetGlyphOutlineも使えないんだろう。

>>354
>でたらめのフォントを作って平然としてるっぽい。

ttp://msdn2.microsoft.com/en-us/library/system.drawing.font.aspx
「Remarks」参照。


380 :デフォルトの名無しさん:2006/12/28(木) 02:40:32
APIフックってLoadLibrary関連とGetProcAddressのフックしないとできないんでしょうか?

381 :デフォルトの名無しさん:2006/12/28(木) 02:43:48
日本語でおk

382 :デフォルトの名無しさん:2006/12/28(木) 06:42:41
>>378
> どうせなら非同期処理を頼んだ時の成否で判断、ぐらい楽したいですね。
エラーが起きたかどうかの判断には時間がかかるかもしれないから
頼んだ時点ではすべて判定できないよ

383 :デフォルトの名無しさん:2006/12/28(木) 06:48:22
なんでGetProcAddressをフックする必要があるのか。
APIフックっていうのは本来のAPIの処理を横取りする手法の事。
IAT書き換えとかDLLExportTableの書き換えとかラッパプログラミングとか
APIフックを実現するための方法はいくらでもある。


384 :373:2006/12/28(木) 09:26:16
"コントロールのハンドル"で検索して答えを見つけました

キタ━(゚∀゚)━ ← GetDlgItem(ダイアログのハンドル, IDOKとか);



385 :デフォルトの名無しさん:2006/12/28(木) 09:26:25
advanced 嫁と>>1が申しております

単純に、フックを回避してコールされるのを防ぐだけって書いてあるだろうが

386 :デフォルトの名無しさん:2006/12/28(木) 10:25:51
流れをぶった切ってスマソ

EnumWindowsで取得したハンドルのプロセス、また実行パスを
取得する方法はありますか?

宜しくお願いします。

387 :デフォルトの名無しさん:2006/12/28(木) 10:39:11
>>380
GetProcAddressのフックの必要性を判断できない程度の能力しか無いなら
APIフックなんて危険だから使わない方がいいよ

388 :デフォルトの名無しさん:2006/12/28(木) 10:43:04
>>386
GetWindowThreadProcessId
GetWindowModuleFileName

389 :デフォルトの名無しさん:2006/12/28(木) 10:49:14
>>388
ありがd。

その二つで試しているのですが、取得できるものとできないものがあり
こまっていますた。

もう少し、ぐぐってみます。


390 :デフォルトの名無しさん:2006/12/28(木) 11:24:21
MSがA/Wのマクロ化だけじゃなくてchar/wchar_tもサポートしてくれてたら
ちょっとだけ楽だよなぁと思う年の瀬

#ifdef UNICODE
LoadLibrary(arg) LoadLibraryW(TEXT(arg))
#else
LoadLibrary(arg) LoadLibraryA(TEXT(arg))
#endif

391 :デフォルトの名無しさん:2006/12/28(木) 11:28:06
おまえは何がやりたいんだ?

392 :デフォルトの名無しさん:2006/12/28(木) 11:34:39
多分 API と STL の共存で std::string 周辺の UNICODE マクロ対応あたりかと…

393 :デフォルトの名無しさん:2006/12/28(木) 11:43:17
#ifdef UNICODE
typedef std::wstring string;
#else
typedef std::string string;
#endif

じゃだめなのか?

394 :デフォルトの名無しさん:2006/12/28(木) 11:45:15
inline HMODULE LoadLibrary(LPCSTR p) { return ::LoadLibraryA(p); }
inline HMODULE LoadLibrary(LPCWSTR p) { return ::LoadLibraryW(p); }

こんなんなってくれてるとありがたいんだが。

395 :デフォルトの名無しさん:2006/12/28(木) 11:55:16
要はwindows.hppなんかが欲しいのか。

うっかりLoadLibrary("hoge")とLoadLibrary(L"hoge")が
混在する可能性もあってお勧めできないな。

NT系は内部WCSだから、ANSI/MBCS版のAPI呼ぶと
中で文字型変換されるからオーバーヘッドが発生するし。

結局TEXTマクロ使うのが一番いいと俺は思う。

396 :デフォルトの名無しさん:2006/12/28(木) 14:27:07
>>361
Windows 2000 の SP3 以降(だったっけ?)だと、
互換モードの機能で Explorer の IAT がすでに aclayers.dll の関数に
上書きされてたりする場合があったようななかったような…


397 :デフォルトの名無しさん:2006/12/28(木) 15:47:38
SP2だお

398 :デフォルトの名無しさん:2006/12/28(木) 15:59:39
>>396
いま確認したら激しくアタリです

仮想マシンで開発環境なんて動かせねえし(ライセンス問題もあるし)
どうあがいても年内に解決できる問題ではありません orz
ほんとうにありがとうございました

399 :デフォルトの名無しさん:2006/12/28(木) 16:09:44
と思ったけどjmpの書き換えでなんとかなるっぽい(たぶん
ともあれ、どうもです

400 :デフォルトの名無しさん:2006/12/28(木) 16:26:23
LoadLibrary(_T("hoge.dll"));

と書くことに
何の不満があるのか分らない。

こうすりゃ、A/W どっちでも適応できるべ。

401 :400:2006/12/28(木) 16:27:57
リロードしてなかった。すまん。

402 :デフォルトの名無しさん:2006/12/28(木) 17:25:06

template<typename Char> void foo(const Char* p)
{
・・・
// Charがcharの場合はA版、wchar_tの場合はW版のAPIを呼びたい
・・・
}

こんなとき>>394みたいなのを用意しないといけないのが面倒くさいよね。

403 :デフォルトの名無しさん:2006/12/28(木) 18:17:45
もうAは要らんやろ・・・

404 :デフォルトの名無しさん:2006/12/28(木) 18:21:08
工工エエエ(´д`)エエエ工工

405 :デフォルトの名無しさん:2006/12/28(木) 19:31:53
フックを勉強しているのですが、下記の例ではIEの最小化ボタンを押下すると
イベントが始まります、これをCtrl+Fが押下された時にフックをかけるように
するにはどのように書いたらいいでしょうか?

// フックするプロシジャー
LRESULT CALLBACK MyCallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
 CWPSTRUCT* lp = (CWPSTRUCT*)lParam;
if( nCode == HC_ACTION ){
  switch (lp->message){
   case WM_SYSCOMMAND:
    if ( lp->wParam == SC_MINIMIZE ){
     MessageBox( NULL , "IEを最小化するメッセージの送出2","確認" , MB_OK | MB_TOPMOST );
     lp->wParam = 0;
     lp->message = WM_CLOSE;
    }
    break;
  }
 }
 if ( lp->message == WM_SYSCOMMAND && lp->wParam == SC_MINIMIZE ) lp->message = WM_CLOSE;
 return CallNextHookEx(g_hHookWnd, nCode, wParam, lParam); //次のフックを呼ぶ
}

406 :デフォルトの名無しさん:2006/12/28(木) 19:34:19
実際Windows CEではとっくの昔に全廃したし。
>>389
GetWindowModuleFileNameはNT系では他プロセスが作成したウィンドウには使えない
GetWindowThreadProcessIdが失敗することはないはず。

407 :デフォルトの名無しさん:2006/12/28(木) 20:01:50
んで、マドンナのrainのPV

http://www.youtube.com/watch?v=KHFxj84aTEk

登場人物に注目ww

408 :407:2006/12/28(木) 20:02:49
スレ間違い
気にしないで

409 :デフォルトの名無しさん:2006/12/28(木) 20:03:37
Win32 :FARPROC GetProcAddress( HMODULE hModule, LPCSTR lpProcName);
WinCE:FARPROC GetProcAddress( HMODULE hModule, LPCWSTR lpProcName);

410 :デフォルトの名無しさん:2006/12/28(木) 20:28:17
空気読まずに書きこ

NT
EnumProcesses->EnumProcessModules
9X
CreateToolhelp32Snapshot->Module32First->Module32Next
の使い分けとか?

だめかなぁ

411 :デフォルトの名無しさん:2006/12/28(木) 20:29:04
おまけ
WinCE version 3.0 and later:FARPROC GetProcAddressA( HMODULE hModule, LPCSTR lpProcName);

412 :デフォルトの名無しさん:2006/12/28(木) 20:37:17
>>393
typedef std::basic_string<TCHAR> string;じゃだめなのか?

>>404
MSLU

413 :デフォルトの名無しさん:2006/12/28(木) 20:43:11
複数のスクロールバーがある場合
どのバーを動かしたのかを調べるにはどうしたらよいのでしょうか??
よろしくお願いします。

414 :デフォルトの名無しさん:2006/12/28(木) 20:47:48
どんな環境での話か書いてくれよ。
WindowsならWindowsとかさ。

415 :デフォルトの名無しさん:2006/12/28(木) 20:52:36
>>414
スレタイ嫁。

416 :デフォルトの名無しさん:2006/12/28(木) 21:07:26
>>405です
お願いします、これだとコンパイルは通るのですが無反応なのですが・・・・・・
どうしたらいいでしょうか、よろしくオナガイシマス
// フックするプロシジャー
LRESULT CALLBACK MyCallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(( GetKeyState( VK_CONTROL ) & 0x80 ) > 0)
{
  MessageBeep(0xffffffff); //ビープ
}
return CallNextHookEx(g_hHookWnd, nCode, wParam, lParam); //次のフックを呼ぶ
}


417 :413:2006/12/28(木) 21:08:20
どうもすいません。
環境はWindowsでVisualStudioを使ってC++で書いてます。

418 :デフォルトの名無しさん:2006/12/28(木) 21:12:36
>>416
×MessageBeep(0xffffffff); //ビープ
○MessageBox( NULL , "IEを最小化するメッセージの送出2","確認" , MB_OK | MB_TOPMOST );
です、スマソ


419 :デフォルトの名無しさん:2006/12/28(木) 21:15:03
ただ単にキーボードフック(WH_KEYBOARD)にすればいいだけじゃないの?

420 :デフォルトの名無しさん:2006/12/28(木) 21:25:19
WH_GETMESSAGEのほうが汎用性あるだろ


421 :デフォルトの名無しさん:2006/12/28(木) 21:46:42
>>416
>GetKeyState( VK_CONTROL ) & 0x80

GetKeyStateの返り値は16bitでわ?


422 :421:2006/12/28(木) 21:52:55
それと省いているみたいだけど、FキーのメッセージをチェックしてからCtrlキーのチェックだよね…


423 :デフォルトの名無しさん:2006/12/28(木) 22:09:14
405=416=418です
よろしくです
>>421
MSDNを見ますと返り値はintなので16ビットだとおもいますが、まずいですか?
>>422
逆で、CtrlをチェックしてからFキーのチェックです

424 :デフォルトの名無しさん:2006/12/28(木) 22:09:47
またフックの話題かよ

そんなにおまえらは何をフックしたいんだ

425 :デフォルトの名無しさん:2006/12/28(木) 22:18:11
個人的にはかわいい娘か、技術系の会話のできるかわいい娘をf(ry

426 :デフォルトの名無しさん:2006/12/28(木) 22:22:29
intが16bitっていつの時代の人間だ?

427 :デフォルトの名無しさん:2006/12/28(木) 22:25:08
>>426
あそうか
32ビットですね

428 :デフォルトの名無しさん:2006/12/28(木) 22:41:00
>>427
>>420


429 :デフォルトの名無しさん:2006/12/28(木) 22:47:36
>>417
WM_VSCROLLかWM_HSCROLLのhwndScrollBarはスクロールバーのウィンドウハンドル。
それをGetDlgCtrlID関数を利用してIDに変換。
なお、IDはCreateWindowのhmenu。

430 :デフォルトの名無しさん:2006/12/28(木) 23:37:18
>( GetKeyState( VK_CONTROL ) & 0x80 ) > 0
本気でこれで Ctrl と F が押下されているかの判定になると思っているのか。

431 :デフォルトの名無しさん:2006/12/28(木) 23:47:11
フックが苦手なんですが、どうすれば強烈なフックが撃てますか?

432 :デフォルトの名無しさん:2006/12/28(木) 23:54:46
>>431
腕だけでなく、腰を捻ってチカラを貯めこんで打つべし

433 :デフォルトの名無しさん:2006/12/29(金) 01:36:37
これならばと思い試していますが今だに解決できません、コンパイルでエラーが出れば
いいのですが・・・・
下記のコードで悪いところを指摘してもらえませんか、タノンマス
// フックするプロシジャー
LRESULT CALLBACK MyCallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
 CWPSTRUCT* lp = (CWPSTRUCT*)lParam;
if( nCode == HC_ACTION ){
  switch (lp->message){
   case WM_KEYDOWN:
    if( wParam == 0x46 ) // このメッセージがFキーのものか
    {
     if( GetKeyState( VK_CONTROL ) & 0x46 ) // Ctrlキーが押されているか
     {
      MessageBox( NULL ,CTRL+Fだ "ゴ━━━━(# ゚Д゚)━━━━ルァ!","確認" , MB_OK | MB_TOPMOST );
      lp->wParam = 0;
      return 0;
      //lp->message = WM_CLOSE;
     }
    }
    break;
  }
 }
 return CallNextHookEx(g_hHookWnd, nCode, wParam, lParam); //次のフックを呼ぶ
}

434 :デフォルトの名無しさん:2006/12/29(金) 01:56:27
>GetKeyState( VK_CONTROL ) & 0x46
GetKeyState の説明をもう一度読み直せ。

435 :デフォルトの名無しさん:2006/12/29(金) 01:58:58
しばしば VirtualProtectEx を実行してもアクセス保護が変更されない気がします

戻り値は1が返されてOldProtectは0なのに、直後にVirtualQueryExで調べると
PAGE_EXECUTE_WRITECOPYを返してきて矛盾しちゃってます

436 :デフォルトの名無しさん:2006/12/29(金) 02:30:43
>>433です
>>GetKeyState の説明をもう一度読み直せ。
if( wParam == 0x46 )
 {
   if( GetKeyState( VK_CONTROL ) & 0x80 )
読んでこうしてみましたが・・・・・なぜ悪いのか
それからここの書き方は間違っていませんでしょうか?
CWPSTRUCT* lp = (CWPSTRUCT*)lParam;

437 :デフォルトの名無しさん:2006/12/29(金) 02:45:52
>>436
0x80(>>433では0x46だが) は何処から出てきたんだ?

438 :デフォルトの名無しさん:2006/12/29(金) 02:46:58
>>437
433は間違えていました、0x46はASCIIのFのことです

439 :デフォルトの名無しさん:2006/12/29(金) 02:53:26
>>438
>GetKeyState( VK_CONTROL ) & 0x80
ここはCtrlキーの判定だろ。
Fキーは関係無い。
GetKeyStateの *戻り値* の説明を読んで来い。

440 :デフォルトの名無しさん:2006/12/29(金) 02:54:27
WH_CALLWNDPROC でWM_KEYDOWN 拾えたんだっけ?

441 :デフォルトの名無しさん:2006/12/29(金) 02:58:51
たぶん「最上位ビットが 1 」なSHORTは2進数で1000000000000000 16進数で0x8000て感じで
GetKeyState( VK_CONTROL ) & 0x80 て書いたんだとおもた

442 :デフォルトの名無しさん:2006/12/29(金) 03:00:19
>>439
確かにそうなのですがここ↓を参考にしているのですが・・・・
ttp://www.geocities.jp/ky_webid/win32c/026.html

443 :デフォルトの名無しさん:2006/12/29(金) 03:00:34
何でそんなに遠回しに教えるんだ?
普通に回答教えれば一発で解って、教える側も教わる側も気持ち良く終われるのに

444 :デフォルトの名無しさん:2006/12/29(金) 03:10:22
つまりこのスレ一番の馬鹿は>>430=>>437=>>439>>433は一方的な被害者って事か。

445 :435:2006/12/29(金) 03:14:40
いくつか解説まわってみたが
GetKeyState(VK_CONTROL) < 0
という書き方のほうが一般的みたいな感じだった

ってことで435もよろしくお願いします

446 :デフォルトの名無しさん:2006/12/29(金) 06:39:05
API の文字列関数に strstr の API 版が無いですが、
みなさんはどのように検索していますか?

447 :446:2006/12/29(金) 06:41:00
すいません、C言語に限定された話です。

448 :デフォルトの名無しさん:2006/12/29(金) 06:44:54
開発中に見つけた不具合
以下のようなGetIconInfoを数ミリ秒毎に呼ぶルーチンがあるのですが、

OnTimer(){
...
ICONINFO iconinfo;
GetIconInfo(hicon, &iconinfo);
}

どうもこのAPIがメモリリークを起こしているらしく、
数万回呼び出された時点でアプリケーション毎に割り当てられる
GUI領域のメモリを使い切って画面表示に不具合を発生させました。

環境はVS2005です。
APIのバグでしょうか?

449 :デフォルトの名無しさん:2006/12/29(金) 06:46:21
shlwapi.dllにStrStrというAPIがあるよ

450 :446:2006/12/29(金) 07:40:49
>>449
ありがとうございます。

451 :デフォルトの名無しさん:2006/12/29(金) 07:43:38
>GetIconInfo creates bitmaps for the hbmMask and hbmColor members of ICONINFO.
>The calling application must manage these bitmaps and delete them
>when they are no longer necessary.

452 :デフォルトの名無しさん:2006/12/29(金) 08:12:07
資料を読まない香具師ほど自分の愚かさを棚に上げて他人の所為にしたがる好例だな。

453 :デフォルトの名無しさん:2006/12/29(金) 09:41:58
質問があります。

WindowsXPなのですが、zip圧縮、ゴミ箱に捨てる等のオペレーションを行うと、
プログレスダイアログがあがりますがあれはAPIを使用しているのでしょうか?

454 :デフォルトの名無しさん:2006/12/29(金) 09:55:14
>>448
開発中に見つけた不具合wwwwwwwwwwwwwwwww

君の頭が不具合なのは良くわかった

455 :デフォルトの名無しさん:2006/12/29(金) 10:58:36
>>453
ゴミ箱に捨てる→SHFileOperation関数
圧縮はどうなんだろ?

456 :453:2006/12/29(金) 11:46:57
>>455
ありがとうございます。

もう一つ、あのダイアログだけを取得する事は可能でしょうか?

457 :デフォルトの名無しさん:2006/12/29(金) 11:48:44
>>456
くわしく

458 :448:2006/12/29(金) 11:53:24
うわ、死にてぇorz
単純な情報取得で勝手にメモリアロケートされるなんて
ハンドルを返したりするAPIだけと思い込んでました。
日本語のMSDNにも明記されてるし。ちょっと吊ってきます・・・

459 :453:2006/12/29(金) 11:53:31
>>457
文盲ですみません。

SHFileOperation関数を実行すると、処理が長い場合に自動で
プログレスバーが表示されます。

あのプログレスバーを取得し、タイトル、メッセージ等を変えて自分で
使用したいとおもいまして、そのようなAPIはあるのかなと。

460 :デフォルトの名無しさん:2006/12/29(金) 12:01:42
vistaのこともあるし、難しいんじゃね?

461 :デフォルトの名無しさん:2006/12/29(金) 12:28:23
スレッド2ついるのかな? 
つい昨日出鱈目にプログレス作って失敗したけど。

462 :デフォルトの名無しさん:2006/12/29(金) 12:32:13
SDKサンプルにaviあるからそれ貼り付ければそれらしくなる
バーも入れたいなら投げっぱなしじゃ無理なのはわかるよな

463 :デフォルトの名無しさん:2006/12/29(金) 12:35:53
shell32.dllのDialog1020と任意のAVI(160〜170)を組み合わせてるだけで出来るだろ。

464 :デフォルトの名無しさん:2006/12/29(金) 14:05:15
インターフェイスにIProgressDialogってのがあるけど、
ME以降なんで注意かも

465 :453:2006/12/29(金) 14:13:11
>>462
リソース使わずにAPIだけで済むのならと思い、質問しました。

>>463
ありがとうございます。検討します。

>>464
まさにこれです。
API使う時点でOSのターゲットを絞るので十分です。
ありがとうございました。

466 :デフォルトの名無しさん:2006/12/30(土) 02:16:13
今IMEで入力中の文字に外部から細工を施したいプログラムを作ろうとしております。
IMEで入力中の文字列を取るには
ImmGetCompositionStringにGCS_COMPSTRを引数に渡せばいいことは分かったのですが、
その前にIMEのコンテキストを得るための
ImmGetContext
の引数のウィンドウハンドルをどうしたら良いのか分からなくて困っています。
現在アクティブなウィンドウの入力を操作したいので、
ForegroundWindowの子ウィンドウのいずれかを指定すればよいのですが、
その中で現在IMEが入力しようとしている子ウィンドウの判定の仕方をどなたか教えて頂けないでしょうか。
よろしくお願い致します。

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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)