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


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

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 では無いの?


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