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


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

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

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

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

2 名前:デフォルトの名無しさん :2006/11/13(月) 08:57:14
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/11/13(月) 08:57:45
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/11/13(月) 08:58:22
- 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/11/13(月) 09:14:06
勝手に追加

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/

6 名前:デフォルトの名無しさん :2006/11/13(月) 10:08:02
これも

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

7 名前:デフォルトの名無しさん :2006/11/13(月) 10:21:14
プリンタとFAXを開くのは、
>CreateProcess()で"c:\windows\system32\control.exe printers"をキックる
でできました。

次に、デフォルトプリンタの印刷設定プロパティを開く方法を教えて下さい。


8 名前:デフォルトの名無しさん :2006/11/13(月) 12:42:49
>>7
うっきききー!!
(DocumentProperties関数じゃないっけ?)

9 名前:7 :2006/11/13(月) 12:44:19
DocumentProperties関数でやったところ、Windowsに保存されませんですた。

で、あきらめて、シェルのコマンドラインでWindowsに起動&保存を丸ごとお願いしようかな、と。

10 名前:7 :2006/11/13(月) 12:45:46
ttp://support.microsoft.com/kb/167345/ja

このソースでやってみましたが、保存されないんです><

11 名前:デフォルトの名無しさん :2006/11/13(月) 13:07:25
>>7
またそれか
printui.dll PrintUIEntryでできるんじゃないの?

12 名前:7 :2006/11/13(月) 13:57:31
>printui.dll PrintUIEntry

ファイル名を指定して実行、で上手く動きません><

13 名前:デフォルトの名無しさん :2006/11/13(月) 14:11:37
>>7
rundll32 printui.dll,PrintUIEntry /e /n"(標準のプリンタ名を取得してここに入れる)"
罵倒と煽りは面倒なので省略

14 名前:デフォルトの名無しさん :2006/11/13(月) 14:38:09
UNICODE や _UNICODE 定義済でコンパイルされたバイナリ(W系API使ってるって意味?)は
9xでは起動すらしないんでしょうか? 
よく「対応していない」って表現されてるんですがもってないのでよくわからないです

15 名前:デフォルトの名無しさん :2006/11/13(月) 15:07:05
>>14
CreateFile関数の場合#defineでCreateFileAとCreateFileWを振り分けている。
意図してCreateFileWを利用すると起動時にDLLエラーが出ると思う。

16 名前:7 :2006/11/13(月) 15:25:20
上手くいきました、有難うございました>>13


ttp://support.microsoft.com/kb/167345/ja

最後の最後ですが、このソースでPCの設定変更出来た方ありますか?

全然上手く行かないお。

17 名前:デフォルトの名無しさん :2006/11/13(月) 15:26:21
複数あるWindowからIEのWindowを絞り出し、そのHTMLDocumentを抜き出すという
事をしたいのですが、その方法で煮詰まっています。

public static bool IECallBack(IntPtr hwnd, IntPtr lParam)
{
StringBuilder sbClassName = new StringBuilder(256);
GetClassName(hwnd, sbClassName, sbClassName.Capacity);
if( sbClassName.ToString().StartsWith("IEFrame"))
{
Form1.al.Add(hwnd);
}
return true;
}

// EnumWindows でIECallBack へさせる。
EnumWindows(new EnumWindowCallBack(Form1.IECallBack), IntPtr.Zero);

こんな感じでWindowのハンドルは取得できるのですが、Window内のオブジェクトを取得する
方法が分からなくて困っています。
どなたかご教授していただけませんでしょうか?よろしくお願い致します。
※板違いだったらすいません。。。

18 名前:デフォルトの名無しさん :2006/11/13(月) 15:40:30
>>15サンクス
9xのDLLはW系をエクスポートしてないってことか

19 名前:デフォルトの名無しさん :2006/11/13(月) 15:54:43
>>14>>18
エントリポイントはあるので、プログラムの起動はできる。
しかし中身がなく、W版関数を呼び出すと失敗となって帰ってくる。
GetLastError()を呼ぶとERROR_CALL_NOT_IMPLEMENTEDが返ってくることがある。

Programming WindowsかAdvanced Windowsのどっちかでは、
MessageBoxWが9xにも実装されていることを使って、RegisterClassが失敗したら
MessageBoxで9xに対応していないというメッセージを表示するというコードを使っていた。

また、Microsoft Layer for Unicodeを使えば、9xでもW版APIを使えるようになる。
実態は文字列を変換してA版APIを呼ぶラッパだったと思う。

20 名前:デフォルトの名無しさん :2006/11/13(月) 16:07:12
なんで9XはW系サポートしないの?

あほじゃね?

21 名前:デフォルトの名無しさん :2006/11/13(月) 17:03:22
>>17
http://www.google.co.jp/search?sourceid=navclient&ie=UTF-8&q=IE+Iunknown+AtlAxGetControl

22 名前:デフォルトの名無しさん :2006/11/13(月) 17:13:35
つまらない質問だが
今画面に

 A  B  C  D

と表示されてるとする
設定によってはCとDは不必要なのでSetWindowPos()を使って画面サイズを変更して

見えてる   隠れている
 A B  | C D

として隠して無かったことにして処理を続けてしまうのはテクニック的に有り?

23 名前:デフォルトの名無しさん :2006/11/13(月) 17:15:14
ヒント:ダブルディスプレイ

24 名前:デフォルトの名無しさん :2006/11/13(月) 17:23:14
ヒントの意味がわからない

orz

25 名前:23 :2006/11/13(月) 17:25:42
ごめん、画面の位置を右にして画面からはみ出させるのと勘違いした。
サイズ変更なら大丈夫かも。





変だけど

26 名前:デフォルトの名無しさん :2006/11/13(月) 17:33:30
>>23
やっぱり変か・・・

ダイアログベースなのだが
WM_CREATE:のタイミングで設定用ダイアログを出して、
その内容によってメインウィンドウのダイアログの内容を変えるって可能?



27 名前:デフォルトの名無しさん :2006/11/13(月) 18:11:30
>>22
俺ならShowWindow(SW_HIDE)で隠す。

28 名前:デフォルトの名無しさん :2006/11/13(月) 18:14:51
ダイアログの実サイズってフォント設定によって違うから
動的にウィンドウサイズいじるのは面倒なんだよね。
俺は外見を切り替えるときは、ダイアログそのものを
切り替えるようにしている。

29 名前:デフォルトの名無しさん :2006/11/13(月) 18:33:52
>>28
フォントによって表示が変わるのか・・・

エントリポイントでCreateDialog()したダイアログの内容を途中から切り替える方法
もしくはそれ以前に設定値を入力できる方法
ってありますかね・・・?

30 名前:デフォルトの名無しさん :2006/11/13(月) 19:13:38
> 9xでW系
MSLU使えばいろいろ問題はあるけど一応動くよ。

31 名前:デフォルトの名無しさん :2006/11/13(月) 19:54:49
もう面倒だからCHtmlDialogでいいじゃないか、と。Win32APIじゃないが。

32 名前:tsurarete yarou. :2006/11/13(月) 21:54:57
>>20
今時 9x ?

貧乏なの?

33 名前:デフォルトの名無しさん :2006/11/13(月) 22:30:46
CreateProsecceでできたプロセスIDから
OpenProsecceでハンドルは取得できないの?

34 名前:デフォルトの名無しさん :2006/11/13(月) 22:41:54
>>32
貧乏言うなー!って、俺は20じゃねぇけど、未だに Win98 や WinMe 使ってるヤツって結構居るらしいぞ。
一般的なコンシューマなユーザはウェブブラウザとメーラが使えりゃそれで充分だしなぁ。
で、そういうマシンがボットネットの温床と化していたりもするらしい。

35 名前:デフォルトの名無しさん :2006/11/13(月) 23:03:19
名前とかに予防線貼ってあるあたり
余程喰らいつきたかったんだろうから
そっとしておいてあげなよw

36 名前:デフォルトの名無しさん :2006/11/13(月) 23:04:51
>>33
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/process_information_str.asp
CreateProcess が返してくるのはプロセスIDでは無くプロセスハンドル。

37 名前:デフォルトの名無しさん :2006/11/13(月) 23:13:24
ウィルス対策ソフトも、9x系は非対応になってきてるしなあ。
早くLinux陣営がそういうユーザを取り込んでくれればいいのに。もっと頑張れ。

38 名前:デフォルトの名無しさん :2006/11/13(月) 23:18:36
>>36
あれ、ハンドル??
ハンドルだったの?

確かに、
BOOL TerminateProcess(
HANDLE hProcess,
UINT uExitCode
);

とかって、ゆってるけど、よく見るとハンドル?!


すっげぇ衝撃だ!

39 名前:デフォルトの名無しさん :2006/11/13(月) 23:56:32
つっこむところなのか?

40 名前:764 :2006/11/14(火) 00:13:40
>>22 ChooseColor

41 名前:デフォルトの名無しさん :2006/11/14(火) 05:01:55
>>37
最近のLinuxはカーネルだけじゃなくていろんなもんがごてごてしすぎて、
9xの代わりにはならなそう。

42 名前:567 :2006/11/14(火) 05:53:02
                             |
                             |
       {    !      _,, -ェェュ、   |
ィ彡三ミヽ  `ヽ     ,ィハミミミミミミミミミヽ、|
彡'⌒ヾミヽ   `ー  /ililハilミilミliliミliliミ.  |
     ヾ、        /iiiiイ!ヾヾミ、ミニ=ー-ミ |
  _    `ー―' i!ハ:.:.\\_::::::::::::::/:.|
彡三ミミヽ        i! ヽ:.:.:.:冫': : :::/,,∠|
彡'   ヾ、    _ノ i!::: ̄二ー:: : ::::ソ ・ ,|
      `ー '    {ヘラ' ・_>シ;テツ"''''"|
 ,ィ彡三ニミヽ  __ノ ヽヘ`" 彡' 〈     |
彡'      ` ̄       `\   ー-=ェっ |
      _  __ ノ  {ミ;ヽ、   ⌒   |
   ,ィ彡'   ̄        ヾミミミミト-- '  |
ミ三彡'        /⌒ / ̄ ̄ | : ::::::::::|
       ィニニ=- '     / i   `ー-(二つ
     ,ィ彡'         { ミi      (二⊃
   //        /  l ミii       ト、二)
 彡'       __,ノ   | ミソ     :..`ト-'
        /          | ミ{     :.:.:..:|

43 名前:デフォルトの名無しさん :2006/11/14(火) 07:02:52
私鉄?

44 名前:デフォルトの名無しさん :2006/11/14(火) 10:07:58
オーバーレイ周りはおいといて
拡張子ごとではなくファイルごとにアイコンが変化しうるものって
.lnk .exe .ico, フォルダ以外にありますか?
また、これのリストを厳密に取得することは出来ますか?

45 名前:デフォルトの名無しさん :2006/11/14(火) 10:47:04
はい
はい

46 名前:デフォルトの名無しさん :2006/11/14(火) 13:47:34
BMPファイルの読み込みと表示をするプログラム↓
ソース→http://www.h4.dion.ne.jp/~zero1341/win01/ex13/ex13.cpp
リソース→http://www.h4.dion.ne.jp/~zero1341/win01/ex13/ex13.rc
ヘッダ→http://www.h4.dion.ne.jp/~zero1341/win01/ex13/resource.h
このプログラムを動かしたいのに出来ない。
実行できるけど画像読み込みのところで止まる。画像を小さくすればなぜかそのまま
進むけど画像表示されず。
なんで?


47 名前:デフォルトの名無しさん :2006/11/14(火) 14:08:39
適当にいってみるとdeleteのタイミングが怪しい

48 名前:デフォルトの名無しさん :2006/11/14(火) 14:16:05
delete 後に値参照かましてるな。
 |delete pIn;
........
 |width=pH->biWidth;

49 名前:デフォルトの名無しさん :2006/11/14(火) 14:22:51
そうでした。
47,48の人ありがとう!

50 名前:デフォルトの名無しさん :2006/11/14(火) 14:37:36
deleteに[]つけなくていいんだっけ?

51 名前:デフォルトの名無しさん :2006/11/14(火) 14:40:09
この場合は結果的にセーフだろうけど… [] つけるべきだろうな。

52 名前:デフォルトの名無しさん :2006/11/14(火) 14:46:25
質問者があほしてるんじゃなくて、サンプルソースに非があるケースってのも珍しいな('A`)

53 名前:デフォルトの名無しさん :2006/11/14(火) 14:52:38
入力データは用済みってコメントの次の行で使ってるからな・・・

54 名前:デフォルトの名無しさん :2006/11/14(火) 18:58:50
配列をnewするようなソースは古い。

55 名前:デフォルトの名無しさん :2006/11/14(火) 19:04:21
>>54
STL と WinAPI 相性悪そうな組み合わせだけど、実際のトコロどうなん?

56 名前:デフォルトの名無しさん :2006/11/14(火) 19:25:16
このネタスレ違いだろ

57 名前:デフォルトの名無しさん :2006/11/14(火) 19:25:20
STLは内部でnewしてるしな
newせず動的にメモリー確保する新しい方法って何だ?
gcnew?

58 名前:デフォルトの名無しさん :2006/11/14(火) 19:42:18
おや?アロケータの存在を知っていれば、
「STLは内部でnewしてる」などという(ry

59 名前:デフォルトの名無しさん :2006/11/14(火) 20:09:47
黙ってLoadImage使っとけってこった

60 名前:デフォルトの名無しさん :2006/11/14(火) 20:34:03
>>55
std::basic_stringが文字列を受け取るバッファに使えないのが痛い。

61 名前:デフォルトの名無しさん :2006/11/14(火) 20:51:30
気にせずstd::vector<TCHAR>でGO

62 名前:デフォルトの名無しさん :2006/11/14(火) 21:39:16
>>44
他にもいろいろあります。

調べる方法としてはレジストリのDefaultIconキーとshellex¥IconHandlerキーをチェックします。
「DefaultIconキーに%1が*含まれて*いる」もしくは「shellex¥IconHandler キーがあれば」、
ファイル毎にかわるもんだと思っていいです。

63 名前:デフォルトの名無しさん :2006/11/14(火) 22:18:24
モーダルダイアログ内でキーボードフォーカスを持つコントロールを調べるAPIってありませんか?
GetFocusはNULLが帰ってくるので・・・

64 名前:デフォルトの名無しさん :2006/11/14(火) 22:35:01
>>63
> GetFocus returns the window with the keyboard focus
> for the *current thread's* message queue.

これにひっかかってるとか?

> To get the window with the keyboard focus on the
> foreground queue or the queue of another thread,
> use the GetGUIThreadInfo function.

65 名前:デフォルトの名無しさん :2006/11/14(火) 22:35:13
GetFocusだが。

66 名前:デフォルトの名無しさん :2006/11/15(水) 04:48:00
1000バイトのファイルがあるとして、先頭の100バイトを削って
900バイトのファイルにしたいんですが、どうやるのが最もよいでしょうか?

お願いします。


67 名前:デフォルトの名無しさん :2006/11/15(水) 05:21:10
切り取り線を入れる

68 名前:66 :2006/11/15(水) 05:36:23
SetFilePointer()で一発でできたらうれしいんですが無理ですよね。

69 名前:デフォルトの名無しさん :2006/11/15(水) 06:04:19
読んで書くだけ

70 名前:66 :2006/11/15(水) 07:32:56
すいません。もうひとつ質問があります。

WriteFileでファイルに書いている際、PCが落ちた場合、元のファイル
がどの程度まで壊れているかの情報ってありますでしょうか?

それとも全部壊れたとみなすべきでしょうか?

少なくとも、すでに存在していたファイルの場合で、そのファイルに
追加書き込みしていた場合、元のファイル分までは壊れてないと
みなしていいのでしょうか?


71 名前:デフォルトの名無しさん :2006/11/15(水) 07:51:17
俺には解答が分からないが
俺なら作業用のテンポラリファイル作って、作業が終わったら上書き保存する。

72 名前:デフォルトの名無しさん :2006/11/15(水) 08:16:11
ntfsなら壊れない

73 名前:デフォルトの名無しさん :2006/11/15(水) 15:58:11
>>66
SetEndOfFile

74 名前:デフォルトの名無しさん :2006/11/15(水) 16:02:24
まぁ
その時書いてた部分までは残ってるわな

75 名前:デフォルトの名無しさん :2006/11/15(水) 16:34:32
WriteFileしただけじゃ、バッファに書かれただけで、
実際にディスクに書かれてるかどうかは分からんけどナ

76 名前:デフォルトの名無しさん :2006/11/15(水) 20:33:07
>>72
NTFSはメタデータのジャーナルしか取らないよ。
だからファイルシステムが矛盾しないことは保証されるけど
ユーザーデータが壊れてないかどうかまではNTFSの関知するところではない

77 名前:デフォルトの名無しさん :2006/11/15(水) 20:33:40
>>73
先頭と末尾を取り違えてませんか

78 名前:デフォルトの名無しさん :2006/11/15(水) 21:15:05
ホントダー

79 名前:デフォルトの名無しさん :2006/11/15(水) 22:12:24
結論:NTFSは屑(pgr

80 名前:デフォルトの名無しさん :2006/11/15(水) 22:43:24
_beginthreadを使用しているコードはWM_CREATEを処理する時に_beginthreadを呼び出しているみたいですが、
ウィンドウプロシージャでスレッドを作成しないとダメなんでしょうか。

81 名前:デフォルトの名無しさん :2006/11/15(水) 22:47:49
そんなことはない。
そのプログラムではたまたまWM_CREATEのときに作る必要があっただけだろう。

82 名前:デフォルトの名無しさん :2006/11/15(水) 22:48:17
>>80
そのサンプルがたまたまWM_CREATEの処理中に _beginthread を使ってるだけ。
基本的にはどこでやってもええよ。

83 名前:デフォルトの名無しさん :2006/11/15(水) 23:14:22
>>81
>>82
ありがとうございます。

84 名前:デフォルトの名無しさん :2006/11/15(水) 23:43:27
どこでもいいわけではない。
DllMainや一部のコールバックでは制限されている。

85 名前:デフォルトの名無しさん :2006/11/15(水) 23:47:55
スレッドで実行してる長いループはちゃんと1000msでSleep呼び出してるのに、
肝心のWinMainがスレッド作成から動いていない・・・何故だ・・・。

86 名前:デフォルトの名無しさん :2006/11/15(水) 23:48:11
>>84
ソースきぼんぬ(死語?)

87 名前:デフォルトの名無しさん :2006/11/15(水) 23:53:51
きぼんぬ!出た!きぼんぬ出た!得意技!きぼんぬ出た!きぼんぬ!これ!きぼんぬ出たよ〜〜!

88 名前:デフォルトの名無しさん :2006/11/16(木) 00:12:05
>>87
俺は限界だと思った。

89 名前:デフォルトの名無しさん :2006/11/16(木) 01:14:04
XPまではデスクトップのlistviewのLVITEM.lParamにpidlが入ってたのに
Vistaじゃ入ってない?

90 名前:デフォルトの名無しさん :2006/11/16(木) 02:12:00
MSDNにそんなこと書いてあった?

91 名前:84ではない :2006/11/16(木) 02:28:16
記憶が確かならCOM関係の本で見かけたような。
具体的にはDLLを動的にロードしたあとDLL側が勝手にスレッドを作ったりして作られたスレッドが走ってる最中にアンロードされたりすると・・・
だったような・・・
・・・でCOMでスレッドを作りたい場合はプロセス内サーバは避けろとかあったような。
(とりあえずEffective COMの項目32で確認)


92 名前:デフォルトの名無しさん :2006/11/16(木) 06:40:53
Win32Apiの勉強をかねてVC2005EEでランチャーソフトを作ってます。

ボタンを押し、その状態のままボタン外へマウスをドラッグさせ、マウスのボタンを放すと
ボタンに登録したアイコンを消す。

という動作をさせようと思い "WM_LBUTTONDOWN" / "WM_LNCBUTTONDOWN" /
"WM_LBUTTONUP" / " WM_LNCBUTTONUP" で処理を書いてみたのですが。
どうもメインフォーム上でのみ反応し、ボタン上では反応しませんでした。

ボタンを対象に何かをしなくてはならないとは思うのですが
良い方法が思い浮かびません。アドバイスをお願いします。

93 名前:デフォルトの名無しさん :2006/11/16(木) 07:05:11
>>92
SetCapture

94 名前:デフォルトの名無しさん :2006/11/16(木) 07:08:52
つ SetCapture/ReleaseCapture

95 名前:デフォルトの名無しさん :2006/11/16(木) 07:14:05
>>93-94
ありがとうございます。
早速調べてみます。

96 名前:デフォルトの名無しさん :2006/11/16(木) 07:21:25
PtInRegionとの組み合わせで解決しそうですありがとうございました。



.NET Framework 2.0 廃止予定の API 一覧
ttp://www.microsoft.com/japan/msdn/netframework/programming/obsoleteapi/
他スレで見かけたので貼っておきますね。

97 名前:デフォルトの名無しさん :2006/11/16(木) 13:48:00
はじめまして、
C++Builderで画像処理ソフトを作っているものですが、
VideoForWindowsで動画をチャプチャしております。
そこで質問なんですが、

1.bmpを介さずに直接メモリにチャプチャする方法
2.動画の描画を行わずに画像を取得(表示すると遅くなるため)

を教えていただけませんか。
いろいろ調べてみたものの解決に至っていません。
DirectShowはちょっと難しかったので使っていません。
どうぞよろしくお願いいたします。

98 名前:デフォルトの名無しさん :2006/11/16(木) 14:04:09 ?2BP(200)
DirectShowの方が圧倒的に簡単。

99 名前:デフォルトの名無しさん :2006/11/16(木) 20:23:43
ttp://wisdom.sakura.ne.jp/system/winapi/win32/index.html
だとCでコンパイルしろっていってるけどC++でWin32APIは使えないの?
このサイトだけでの話?

100 名前:デフォルトの名無しさん :2006/11/16(木) 20:28:15
帰れ低脳
使える使えないを語る以前の問題じゃ

101 名前:99 :2006/11/16(木) 20:33:25
自己解決したわ。そのサイトだけっぽい。
猫のとこなら.cppだったわ・・・

102 名前:デフォルトの名無しさん :2006/11/16(木) 20:40:23
絶対、注意書きの意味を理解してないな

103 名前:デフォルトの名無しさん :2006/11/16(木) 20:52:20
apiの勉強する前に
C/C++の基本を勉強する方が先みたいだな

104 名前:デフォルトの名無しさん :2006/11/16(木) 20:54:59
禿do

105 名前:デフォルトの名無しさん :2006/11/16(木) 21:31:53
CをC++でコンパイルするとパソコンが爆発するよ。

106 名前:デフォルトの名無しさん :2006/11/16(木) 21:44:09
マジで?やべーな・・・

107 名前:デフォルトの名無しさん :2006/11/16(木) 23:47:05
C++を学ぶと頭が禿げると聞いたのですが?

108 名前:デフォルトの名無しさん :2006/11/16(木) 23:58:32
そりゃコンパイラ開発者がアレだからなぁ

109 名前:デフォルトの名無しさん :2006/11/17(金) 00:01:04
Delphiばかりやってると馬鹿になると聞いたのですが?wwww

110 名前:デフォルトの名無しさん :2006/11/17(金) 00:04:01
俺はC++勉強し始めて10年後くらいから薄くなってきた。

111 名前:デフォルトの名無しさん :2006/11/17(金) 00:05:38
デルポイ

112 名前:デフォルトの名無しさん :2006/11/17(金) 00:17:45
>>110
勉強しなかった場合と比較できないので科学的実験結果としては有意でないと考えられる。

113 名前:デフォルトの名無しさん :2006/11/17(金) 12:57:59
カレントディレクトリに指定したファイル名のファイルが
存在するかを調べる関数がありましたら教えてください。

CreateFileとかで失敗したらとかでもできると思いますが、
正規のがありましたら教えてください。

114 名前:デフォルトの名無しさん :2006/11/17(金) 13:25:32
SearchPath
FindFirstFile

好きな方でどうぞ

115 名前:デフォルトの名無しさん :2006/11/17(金) 15:00:48
普通はopenでやっちゃうと思う。

116 名前:113 :2006/11/17(金) 15:16:46
>>114>>115
ありがとうございます。使ってみます。

117 名前:デフォルトの名無しさん :2006/11/17(金) 16:39:28
絶対パスを相対パスに変換するAPIがあったら教えてください。

118 名前:デフォルトの名無しさん :2006/11/17(金) 16:42:27
PathMakeRelative

119 名前:デフォルトの名無しさん :2006/11/17(金) 16:48:43
PathRelativePathTo で出来そうです。
本当にありがとうございました。

120 名前:デフォルトの名無しさん :2006/11/17(金) 18:50:32
>>113
PathFileExists というズバリな関数がある

121 名前:デフォルトの名無しさん :2006/11/17(金) 19:21:57
>>120
知らなんだー
GetFileAttributes使ってた。


122 名前:デフォルトの名無しさん :2006/11/17(金) 23:41:07
おらもだ

123 名前:デフォルトの名無しさん :2006/11/17(金) 23:45:50
一応書いておくが、shlwapi.dllの関数で要IE4以上。

124 名前:デフォルトの名無しさん :2006/11/18(土) 00:33:17
#pragma comment(lib, "SHLWAPI.lib");

125 名前:デフォルトの名無しさん :2006/11/18(土) 01:36:31
shlwapiは便利だね
wsnprintfとかワイルドカードでのマッチングもたしかあの中だったよね?

126 名前:デフォルトの名無しさん :2006/11/18(土) 01:40:28
APIらしくGetProcAddressを使うんだよ!

やったことないけどさ

なぜかPath〜系は未だにMSDNが日本語じゃないんだよな
8月版になったからといって更新されるわけもなし

127 名前:デフォルトの名無しさん :2006/11/18(土) 01:49:24
ウィンドウズプログラムで質問したい事があります。
ググったのですがいまい解決できそうなページがありませんでした。
作っているのはアナログ時計です。
開発環境はVC++6.0 Proです。SDKで作っています。
丸いリージョンで表示した時計のウィンドウがあります。
ウィンドウのクライアント領域はマウスでドラッグして移動できるように
細工をしております。
アナログ時計のウィンドウをデスクトップ領域の上端より超えて移動すると
ウィンドウのキャプションが隠れるあたりでマウスのボタンを離すと
自動的にキャップションが少しだけ見える位置に移動してしまいます。
ウィンドウのクライアント領域でのマウスの移動が出来るのでできれば
デスクトップの上端から上へキャプションが隠れてもそのままウィンドウが
移動できるようにはできないでしょうか。
よろしくお願いします。

128 名前:デフォルトの名無しさん :2006/11/18(土) 02:29:18
>>127
よく分からんけど足りなさそうな情報を質問。
細工ってヒットテストにキャプションって返すやつ?

129 名前:127 :2006/11/18(土) 02:46:30
ヒットテストでクライアント領域はキャプションとして返してます。
それによりウィンドウのクライアント領域をドラッグしてウィンドウを移動できます。

例えると以上の設定をして、普通のウィンドウのクライアント領域をドラッグして、
ウィンドウのキャプションをデスクトップの上端より隠れるように
ウィンドウを移動させると自動的にウィンドウがキャプションを少しだけ表示した状態に
なってしまうのです。それを移動してキャプションが隠れるようにしたいのです。

130 名前:デフォルトの名無しさん :2006/11/18(土) 07:25:34
ダイアログ上にグループボックスを配置し、その上辺に重なるように
チェックボックスを置いています。

表示すると、グループボックスのほうが上に来てしまうんですが、
どうすればチェックボックスを上に持ってこれますか?

たぶんZオーダーの問題だと思うんですが、以下のようにしても
うまくいきませんでした。

SetWindowPos(groupbox, checkbox, 0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

131 名前:デフォルトの名無しさん :2006/11/18(土) 08:01:48
>>130

132 名前:130 :2006/11/18(土) 10:06:29
逆にしたらできました。orz

133 名前:デフォルトの名無しさん :2006/11/18(土) 13:39:41
今読んでる本には
『CreateSolidBrushで得たHBRUSH型変数は、不要になればDeleteObjectで破棄してください』
と書いてあるんですが、その本のサンプルプログラムでは破棄していないみたいなんです。
プログラムが終了すれば自動的に破棄されると考えれば、そのサンプルプログラムが破棄しないのも納得がいくのですが、
自動で破棄されるんでしょうか。

134 名前:デフォルトの名無しさん :2006/11/18(土) 13:46:46
プロセスが終了すると、そのプロセスが握っているリソースはすべて解放されるよ
他プロセスと共有している場合は参照カウンタが1減り、0になったらOSにより解放される

現存するメジャーなOSのほとんどはこうなってるよ

135 名前:デフォルトの名無しさん :2006/11/18(土) 14:11:19
プロセスが終了するか、DeleteObjectで明示的に破棄しないと解放されないから
プロセスが走ってる間にいくつも作っては捨てをする場合は要らなくなったらDeleteObjectした方がいいね
1個2個作ってそのままくらいなら、プロセス終了時のリソース解放に任せてもいい

136 名前:デフォルトの名無しさん :2006/11/18(土) 14:49:31
>>134>>135
ありがとうございました

137 名前:デフォルトの名無しさん :2006/11/18(土) 14:53:20
HFONTからLOGFONT取得って可能ですか? 
CreateFontIndirectの逆のことしたいんですけれども

138 名前:デフォルトの名無しさん :2006/11/18(土) 15:01:09
GetObject

139 名前:デフォルトの名無しさん :2006/11/18(土) 15:04:48
ぉぅぃぇ盲点だった  orz
ありがとう

140 名前:デフォルトの名無しさん :2006/11/18(土) 15:25:04
>>136
いちおう念を押しておくとWM_PAINTは再描画のたびに呼ばれるからな

141 名前:デフォルトの名無しさん :2006/11/18(土) 23:10:31
ウィンドウを作成して、タスクバーにそのウィンドウを表示させないように
したいのですが、どうしたら良いのでしょうか・・・

ツールウィンドウ を使うしか無いのでしょうか>< 
教えて下さいエロい人


142 名前:デフォルトの名無しさん :2006/11/18(土) 23:13:29 ?2BP(0)
>>141
不可視のオーナーウィンドウ

143 名前:デフォルトの名無しさん :2006/11/18(土) 23:24:28
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_TaskTray.html

144 名前:デフォルトの名無しさん :2006/11/18(土) 23:27:26
ありがとう >>142 >>143

解決出来ました。

145 名前:デフォルトの名無しさん :2006/11/19(日) 02:24:00
2つのpathが同じかどうか簡単に調べる方法はないでしょうか?


146 名前:デフォルトの名無しさん :2006/11/19(日) 02:44:04
GetVolumePathNameとGetVolumeInformationでボリュームが同じかどうか調べて
(同じボリュームでなければ当然同一パスでもない)
GetFileInformationByHandleでファイルIDを比較する。

147 名前:デフォルトの名無しさん :2006/11/19(日) 06:06:44
>>145
PathSearchAndQualifyとかPathCanonicalizeが使えないかな?

148 名前:デフォルトの名無しさん :2006/11/19(日) 07:32:00
ここかどうか分からないですが
ISUファイルの作り方ってどこかに載っていませんか?

149 名前:デフォルトの名無しさん :2006/11/19(日) 07:33:15
>ここかどうか分からないですが
質問がここで良いかどうか分からないという意味です。

150 名前:145 :2006/11/19(日) 09:27:15
>>146,147
ありがとう。API調べてみます。

151 名前:デフォルトの名無しさん :2006/11/19(日) 09:36:23
>>148
一般的にアンインストール情報ファイルに付加される拡張子、らしいね。
インストーラ作ってるメーカに問い合わせてみれば?

152 名前:デフォルトの名無しさん :2006/11/19(日) 10:16:15
インストーラ作ってるメーカーって、ありゃMSインストーラ・・・

153 名前:デフォルトの名無しさん :2006/11/19(日) 11:08:39
再起動しないでアンインストールする方法がないかと思いまして。
BATファイルは自分自身を削除できますが、コマンドプロンプトが表示されてしまいます。

154 名前:Kioo :2006/11/19(日) 11:22:32
Dialogにあるエディットボックスの内容を入手して、char[]又はstringにいれたいのですが、
どうすればいいのでしょうか

155 名前:デフォルトの名無しさん :2006/11/19(日) 11:25:37
>>154
言語は?

156 名前:Kioo :2006/11/19(日) 11:34:35
すいません言語書き忘れました。
C++です。

157 名前:デフォルトの名無しさん :2006/11/19(日) 11:38:56
そのダイアログってのはどのダイアログなんだ

158 名前:Kioo :2006/11/19(日) 11:42:36
RCファイルで作ってあるダイアログで、

IDD_ADD DIALOG DISCARDABLE 0, 0, 240, 75
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_THICKFRAME | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_SETFONT
CAPTION "Form"
FONT 8, "MS 明朝"
{
CONTROL "  ID:", IDC_LABEL202, "STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 12, 12, 45, 6
CONTROL "", IDC_EDIT_ID, "EDIT", WS_CHILD | WS_DLGFRAME | WS_VISIBLE | ES_AUTOHSCROLL, 54, 12, 111, 6
}



IDC_EDIT_IDのエディットボックスです。

159 名前:デフォルトの名無しさん :2006/11/19(日) 11:44:45
>>153
DELETE_ON_CLOSE付きCreateFileで
Tmp辺りにアンインストーラをコピーしてそれを起動する、だったと思う。
「アプリケーションの追加と削除」が微妙な動きをした記憶もあるけど(w

そうそう、削除する時は自分のアプリ関連のファイルのみを対象にする事。
誤って他のアプリやデータが入ったフォルダにインストールしていたら、
目も当てられない状態に。というか昔やっちゃったよ orz

160 名前:デフォルトの名無しさん :2006/11/19(日) 11:56:24
>>159
なるほど、目に付かない場所に作って後で消すように設定すれば同じですね。

>>158
MFCのCDialogの派生クラスでなら

CWnd* pWnd = GetDlgItem(IDC_EDIT_ID);
char buff[256];
CString str;

pWnd->GetWindowText(buff, 255);
pWnd->GetWindowText(str);

CStringとcharの配列に文字列が入ります。
ダイアログ表示中以外のタイミングですか?

161 名前:デフォルトの名無しさん :2006/11/19(日) 12:02:41
>>158
エディットボックスの内容が書き換えられた時に
GetWindowTextLength(GetDlgItem(IDC_EDIT_ID));で文字列の長さを取得
それに+1したサイズで、new char[]なりGlobalAllocなりでバッファを確保
GetWindowTextで文字列を取得する

stringが使いたかったら、さらにバッファからstringへ代入すればいい

162 名前:デフォルトの名無しさん :2006/11/19(日) 12:16:40
エディットボックスの入力できる文字数は最大255バイトとか制限あったっけ?

163 名前:Kioo :2006/11/19(日) 12:25:51
>>160
今はまだありませんが、ダイアログの下部にボタンをひとつおき、それが押されたら、文字列を変数に入れてダイアログを閉じるようにする予定です

164 名前:デフォルトの名無しさん :2006/11/19(日) 12:36:34
GetDlgItemText()ってのもあるよ

165 名前:デフォルトの名無しさん :2006/11/19(日) 13:27:57
const int len = GetWindowTextLength(hEdit) +1;
TCHAR* pszText = static_cast<TCHAR*>(HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len*sizeof(TCHAR)));
GetWindowText(hEdit, pszText, len*sizeof(TCHAR));
// std::string(pszText);
/* 処理 */
HeapFree(GetProcessHeap(), 0, pszText);

半ば定型文

166 名前:デフォルトの名無しさん :2006/11/19(日) 13:32:26
あ、stringのとこおかしいや コンパイル通してないから気付かんかったorz

167 名前:デフォルトの名無しさん :2006/11/19(日) 13:35:32
コンパイル通さんでも気付くような間違いだがよw

168 名前:デフォルトの名無しさん :2006/11/19(日) 14:35:57
>>159
FILE_FLAG_DELETE_ON_CLOSE だったんですね。ちょっと気が付きませんでした。

169 名前:デフォルトの名無しさん :2006/11/19(日) 15:49:02
しまった。APIスレなのにMFCで答えてしまった。MFCを使用している場合はこちら。
■MFC相談室 mfc16d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1146117893/

170 名前:デフォルトの名無しさん :2006/11/19(日) 17:14:47
PlaySoundで.wavを1回でも再生したプログラムを
終了する時についての質問です。

通常の閉じるをクリックしての終了、
右クリックした時にWM_CLOSEを投げての終了はうまくいくのですが、
ESC(WM_KEYDOWN)が押された時にWM_CLOSEを投げての終了が、
ウィンドウが閉じられるまでに、
CPU率が高くなった状態ですこし止まってしまいます。

原因はどこにあるのでしょうか。

PlaySound(NULL, NULL, 0);はいれています。
また、なぜかMessageBeep(MB_OK);を
抜ける直前に挟むと、ちゃんと終了できます。

171 名前:153 :2006/11/19(日) 17:58:24
>>159 を試してみましたが、作った実行ファイルによるプロセスが先に終了する場合しか
ファイルが削除されません。
何か継承しなければいけないのでしょうか?


172 名前:デフォルトの名無しさん :2006/11/19(日) 18:17:21
>>171
FILE_FLAG_DELETE_ON_CLOSE法はうまくいかない。
たぶんみんな試さないで書いてると思う。
漏れが昔ここで聞いた方法
1. rundll32で削除用dllを起動する。
2. 削除用dllからアンインストーラの終了を待って消す。
3. FreeLibraryしてから自分自身を消すコードをヒープにコピーして呼び出す。
 (ヒープにPAGE_EXECUTEをつけるのをお忘れなく)

173 名前:デフォルトの名無しさん :2006/11/19(日) 19:23:45
>>172
試さないで書くけど FILE_FLAG_DELETE_ON_CLOSE によるサンプル。
ttp://web.archive.org/web/20051123112406/http://www.numeric.co.jp/Win32.htm

174 名前:デフォルトの名無しさん :2006/11/19(日) 19:34:50
> このとき、SYNCHRONIZEでオープンし、分身モジュールにハンドルを継承できる
> ようにする。
これがポイントか?

175 名前:デフォルトの名無しさん :2006/11/19(日) 19:38:34
>>174
よくわからんけどそれはハンドルを共用するためだろう。
ハンドルは何で共用する必要があるかというと、
 分身起動→本体終了→分身により本体削除
のシーケンスを同期をとって実行するため。

176 名前:153 :2006/11/19(日) 20:04:41
SYNCHRONIZEフラグはNT系のみ使用できるようです。

177 名前:デフォルトの名無しさん :2006/11/19(日) 20:31:15
>>173
試してみたけどやっぱり消えないぞ。
むちゃくちゃコードを補う必要があったからどっかでミスってるのかもしれんが

178 名前:153 :2006/11/19(日) 21:09:01
>>172
3. FreeLibraryしてから自分自身を消すコードをヒープにコピーして呼び出す。
 (ヒープにPAGE_EXECUTEをつけるのをお忘れなく)

LPVOID pMem = (LPVOID)GlobalAlloc(GMEM_FIXED, size);
DWORD nID;

pMem = VirtualAlloc(pMem, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
// pMemにコードをコピー
CreateThread(NULL, 0, pMem, pMem, 0, &nID);
return:

DWORD WINAPI ThreadFunc(LPVOID pMem)
{
// 待ち処理
// 削除
VirtualFree(pMem);
GlobalFree(pMrm);
return 0;
}
こんな感じでしょうか?

179 名前:デフォルトの名無しさん :2006/11/19(日) 21:38:30
> LPVOID pMem = (LPVOID)GlobalAlloc(GMEM_FIXED, size);
> pMem = VirtualAlloc(pMem, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
上のGlobalAllocは何のためにあるんだ?

180 名前:デフォルトの名無しさん :2006/11/19(日) 21:38:50
ちょwwwVirtualAllocwwwww

181 名前:153 :2006/11/19(日) 21:41:02
PAGE_EXECUTEを受け付ける確保がVirtualAllocだけのようなので。
GlobalAllocは必要ありませんでしたか。

182 名前:デフォルトの名無しさん :2006/11/19(日) 21:47:50
API以前にC言語の基本からやり直せ
そのレベルじゃ>>172のコードを書くのは無理

183 名前:デフォルトの名無しさん :2006/11/19(日) 21:55:25
CD/DVD焼ソフトみたいにCD/DVD挿入時の自動再生を
一時的に無効にする方法を教えてください。
OS は Windows MeとXPです。

184 名前:デフォルトの名無しさん :2006/11/19(日) 22:01:49
RegisterWindowMessage("QueryCancelAutoPlay");
なメッセージを処理して1を返す

185 名前:デフォルトの名無しさん :2006/11/19(日) 22:06:24
俺も新人にCやDOSコマンドを教えた事があるが、理解できなかった時は常に教えた側に
問題があったぞ。
>FreeLibraryしてから自分自身を消すコードをヒープにコピーして呼び出す
この手段に対して何も触れてないじゃないか。

186 名前:デフォルトの名無しさん :2006/11/19(日) 22:08:26
>>185
そもそもそんなとこから教えなきゃならん事態が既に間違ってるってことはわかってるか?

187 名前:デフォルトの名無しさん :2006/11/19(日) 22:09:13
GlobalAllocで割り当てたメモリが入ってるpMemを黙って上書きしてるのも
教えた側の責任か? それ見てこれ以上付き合う気なくしたんだが。

188 名前:デフォルトの名無しさん :2006/11/19(日) 22:10:40
ここはあくまで善意の質問箱であり
プログラム教室ではない

189 名前:デフォルトの名無しさん :2006/11/19(日) 22:13:33
×俺も新人にCやDOSコマンドを教えた事があるが、理解できなかった時は常に教えた側に
問題があったぞ。
○俺も新人のときCやDOSコマンドを教わった事があるが、この俺様に理解できなかった
のだから常に教えた側の問題に決まってる。

×この手段に対して何も触れてないじゃないか。
○とっとと手段を教えろよ情報を小出しにしやがって使えねーパソヲタども

つーか本当にそこが問題でできないなら聞き返してさえこない時点でオhル

190 名前:デフォルトの名無しさん :2006/11/19(日) 22:15:29
テンプレすら読めない人がデカい顔してるスレはここですか?
>・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。

191 名前:デフォルトの名無しさん :2006/11/19(日) 22:20:54
GlobalAllocにGMEM_FIXEDフラグを入れれば直接アドレスが返ってくるのも知らんのか。
格下に聞いちまったようだな。

192 名前:デフォルトの名無しさん :2006/11/19(日) 22:23:48
触らない方がいいのかな

193 名前:デフォルトの名無しさん :2006/11/19(日) 22:28:02
>知らないから答えられません。
って素直に言えばいいのによ

194 名前:デフォルトの名無しさん :2006/11/19(日) 22:29:55
知らないから答えられません

195 名前:デフォルトの名無しさん :2006/11/19(日) 22:31:15
知ってても答えません

196 名前:デフォルトの名無しさん :2006/11/19(日) 22:34:48
本当は知らないんだけど、知らないっていうの癪だから
知ってるけど、教えてやらない。

197 名前:デフォルトの名無しさん :2006/11/19(日) 23:12:47
ヒープてことは動的だけど、
ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_123.htm
(くメィさん使わしてもらいます)
これじゃないの?やるのは。

198 名前:デフォルトの名無しさん :2006/11/19(日) 23:12:58
> GlobalAllocにGMEM_FIXEDフラグを入れれば直接アドレスが返ってくるのも知らんのか。
そんなことぐらい誰でも知ってる。
問題はそこじゃねーよアホ。メモリリークという言葉も知らんのか

> 知らないから教えてください
って素直に言えばいいのに

199 名前:デフォルトの名無しさん :2006/11/19(日) 23:17:04
>>197
全然関係ない。
つーか>>172でコピー先がヒープであることは本質的じゃない。
別にVirtualAllocでもいいから(むしろMSの推奨はそっちだった気がする)
>>180が何を笑ってるのかよくわからん。
問題は意味もなくGlobalAllocしてメモリリーク起こすようなコードを平然と書く奴に
手取り足取り教えてられるほど暇じゃないってこと。

つーかコードをメモリ上でコピーするやり方はAdvanced Windowsに載ってるんだから
マジで読んでくれ

200 名前:デフォルトの名無しさん :2006/11/19(日) 23:31:39
推奨はVirtualってか、Virtualは仮想メモリに直接確保、Globalはプロセスのヒープに確保じゃなかったかいの?
MSがGlobalよりこっち使えって言ってるのは確かHeapAlloc

201 名前:デフォルトの名無しさん :2006/11/19(日) 23:49:05
>>198
嘘吐け、俺が教えてやったから言えるんだろうが。
最初は頭下げてただろうが下衆野郎。しらねーくせに威張ってんじゃねえよ。

>>199
最初から本でも書いときゃ良いだろうがよ。暇じゃない割に2chにへばりついてやがんな。

202 名前:デフォルトの名無しさん :2006/11/19(日) 23:54:10
>俺が教えてやったから言えるんだろうが

203 名前:デフォルトの名無しさん :2006/11/19(日) 23:58:18
ここでおかしな流れをぶった切って・・・


>>153
WSHなら自分自身を削除できるし、コマンドプロンプトも出ない。

var fso = WScript.CreateObject("Scripting.FileSystemObject");
fso.DeleteFile("c:\\test.js");

これでアンインストーラを作ったことはないがなw

204 名前:デフォルトの名無しさん :2006/11/20(月) 00:05:47
>>203
簡易的には使えそう。
どうせならバッチファイルで

205 名前:デフォルトの名無しさん :2006/11/20(月) 00:18:02
>>203
98以降には一応装備されているから、バージョンが古いけど簡単な操作なら充分かもしれない。
どうしても駄目なら「BATファイルで御免なさい」ですね。

206 名前:デフォルトの名無しさん :2006/11/20(月) 00:27:54
>>200
WinXP SP2から、VirtualAllocでPAGE_EXECUTE付けて、
その領域のコードを実行できるようにせんと
アクセス違反になるんじゃなかったけ?
たしか、バッファーオーバーフローで任意コードを実行されるのを防ぐためとかだったはず。
ただのデータ置き場ならGlobalAllocでもいいけど。


207 名前:デフォルトの名無しさん :2006/11/20(月) 00:36:24
>>204
や、バッチファイルだとコマンドプロンプトが出てしまうって話でそ?
まあバッチファイルでも、CreateProcess()でDETACHED_PROCESSで起動すれば
コマンドプロンプトは出ないはず。

208 名前:デフォルトの名無しさん :2006/11/20(月) 00:43:53
ショートカットを右クリックして「リンク先を探す」を実行すると、
エクスプローラが立ち上がって、当該ファイルが選択されますが、
これと同じことをするにはどうすればいいんでしょうか?

お願いします。

209 名前:デフォルトの名無しさん :2006/11/20(月) 00:57:40
>>201
> 最初は頭下げてただろうが
誰に言ってるの? 頭大丈夫?
> 最初から
>>1に書いてるが何か?

210 名前:デフォルトの名無しさん :2006/11/20(月) 01:00:07
> しらねーくせに威張ってんじゃねえよ。
鏡に向かって話すのが好きなんですね

211 名前:デフォルトの名無しさん :2006/11/20(月) 01:02:28
>>206
GlobalAllocでもHeapAllocでもスタックでもVirtualProtectでPAGE_EXECUTEを
付けてやれば実行できるようになる。
当然同じページにある周囲のメモリも巻き込まれるのであまりよろしくないけど

212 名前:デフォルトの名無しさん :2006/11/20(月) 01:05:09
> 教えてやったから言えるんだろうが
いやあ仮にそのとおりだとしても
返すものがハンドルだろうがポインタだろうがメモリリークしてることに変わりないし
そもそもGlobalALlocを呼び出す意味自体一切ないと教えてあげてるのに
理解しないばかりか逆切れしてるどっかのバカには負けますよw

213 名前:デフォルトの名無しさん :2006/11/20(月) 01:16:20
(´・ω・`)   n
⌒`γ´⌒`ヽ( E)
( .人 .人 γ ノ
ミ(こノこノ `ー´
)にノこ(

214 名前:デフォルトの名無しさん :2006/11/20(月) 02:11:17
intを戻す関数の中で、return 0;を書く位置が早いとちゃんとreturnされるが、
遅い(関数の最後)だと エラーがでる。
少しずつreturn 0をずらして書いてみると、ある位置より早ければちゃんとreturnされる。

コンパイル時はエラー0となってて実行時に メモリがreadになれませんでした。となる。
関数のなかで、他の関数を呼びまくってるから呼び出し元がどこだったかを忘れてるのでしょうか?
どうすればいいのやら??


215 名前:デフォルトの名無しさん :2006/11/20(月) 02:15:57
APIと何の関係もないな

216 名前:デフォルトの名無しさん :2006/11/20(月) 02:18:11
んな馬鹿な。単に「他の関数」とやらで落ちているのだろ。
その原因は呼び方の間違いだろうがな。

217 名前:デフォルトの名無しさん :2006/11/20(月) 02:27:04
>>216も同じ意味かもしれんが、returnで落ちるなら
呼び出し規約とかシグネチャが違うとか?

218 名前:デフォルトの名無しさん :2006/11/20(月) 02:34:40
a();

return 0;  ← 正常に戻る

b();

return 0;  ← 落ちる


だと、明らかに b() の中で落ちてるだろ

219 名前:デフォルトの名無しさん :2006/11/20(月) 02:37:19
相手してくれてありがとう。

int Kansu{

MessageBox(NULL,"1","めっせじ",MB_OK);
//return 0; //ここならもちろん戻る。

//中略
//中略

MessageBox(NULL,"2","めっせじ",MB_OK); // ここまでの処理は全部やってくれてるのに・・
return 0;  //ここで落ちる。"0x33333231"の命令が"0x33333231"のメモリを参照しましただって・・

}

下記のようにダイアログベースのボタんから読んでるだけの超単純なものなのに。
中略部分がややこしいことしてるのでソースは書けないです。
-------------------------------------------------------
case IDC_BUTTON1:
Kansu();
MessageBox(NULL,"もどったよ","よびだしもと",MB_OK);
return TRUE;
-------------------------------------------------------
わからん。 いままでこんなことなかったのに・・。ねるしかないか・・


220 名前:デフォルトの名無しさん :2006/11/20(月) 02:37:20
デバッガ使えば

221 名前:デフォルトの名無しさん :2006/11/20(月) 02:39:00
デバッガ使い方わかんないです。 messageboxをはさみまくってたしかめる方法でいままでがんばってきました。
お笑いですね。。

222 名前:デフォルトの名無しさん :2006/11/20(月) 02:40:21
> 中略部分がややこしいことしてるのでソースは書けないです。
明らかにそこのせいだろ。>>217も言ってるが呼び出し規約が怪しい

223 名前:デフォルトの名無しさん :2006/11/20(月) 02:41:18
悪いことは言わんからデバッガの使い方学習して来い。
もう一度言うけどWin32 APIぜんぜん関係ないので

224 名前:デフォルトの名無しさん :2006/11/20(月) 03:11:27
解決しました。構造体のメモリ確保が1個分足りないのが原因でした。
デバッガは学習してきます。圧倒的初心者のお相手ありがとうございました。
すみませんでした。

225 名前:デフォルトの名無しさん :2006/11/20(月) 03:16:17
途中の関数でスタック壊してるんじゃ舞か
そしてとんでもないアドレスにリターンしようとしているのでわ

226 名前:デフォルトの名無しさん :2006/11/20(月) 03:22:38
>>224
1回使い方分かっちゃえばめっさ楽になるからガンバレ

227 名前:デフォルトの名無しさん :2006/11/20(月) 07:29:04
ウィンドウメッセージの数値から、
WM_**の文字列で取得するAPIがありましたら教えてください。

228 名前:デフォルトの名無しさん :2006/11/20(月) 08:10:36
取得するもなにも switch( message ) で case WM_***: やってると思うけど

229 名前:デフォルトの名無しさん :2006/11/20(月) 08:20:12
>>184
ありがとうできました。

230 名前:デフォルトの名無しさん :2006/11/20(月) 09:40:32
>>227
無いよ。自分で変換テーブル作れ。

231 名前:227 :2006/11/20(月) 10:06:05
>>228>>230
分かりました。ありがとうございます。

232 名前:デフォルトの名無しさん :2006/11/20(月) 10:10:31
Jeffrey Richter
バッチのサンプル
 ttp://www.microsoft.com/msj/archive/SF9C.aspx
 ここのW32Q0196.zip
FILE_FLAG_DELETE_ON_CLOSEのサンプル
 ttp://www.microsoft.com/msj/0198/win320198.aspx
 なぜかダウンロードできない。XPでは不調でした。

233 名前:デフォルトの名無しさん :2006/11/20(月) 11:06:10
以前に、EXE自分自身を削除するプログラムを作ることがあって、
いろいろ見つけたサンプルを元に FILE_FLAG_DELETE_ON_CLOSE
を試行錯誤してみたが、うまくいかなかった。
(例) 98系と2000系で挙動が違う (すまん、どう違ったかは覚えてない)
(例) EXEがネットワークドライブ上だとうまくいかない

で、結局、俺は以下のようにした。
(1) 削除用プログラム(自分自身)を「<GetTempPath()のディレクトリ>\DeleteMe.tmp」にコピー
(2) (1)をMoveFileEx( MOVEFILE_DELAY_UNTIL_REBOOT )で削除予約。
(3) (1)をCreateProcess()、自分自身は終了。

(1)はユーザーがリブートするまで消えないが、ユーザーの目に触れなきゃOK!


234 名前:デフォルトの名無しさん :2006/11/20(月) 11:10:42
試さずに書くが・・・・・

235 名前:デフォルトの名無しさん :2006/11/20(月) 11:12:41
(スマン、234はしくじった)

試さずに書くが・・・・・

バッチ(command.com/cmd.exe)をSW_HIDEでCreateProcessしては?


236 名前:デフォルトの名無しさん :2006/11/20(月) 13:03:52
>>233
その方法も良いと思います。
>>234-235
少なくとも ShellExecute ではうまくいきました。

皆さんお世話になりました。お騒がせしました。

237 名前:デフォルトの名無しさん :2006/11/20(月) 13:11:39
>>232
参考になりました。

238 名前:デフォルトの名無しさん :2006/11/20(月) 20:31:37
メインのGetMessageをまわしているループとは別のスレッドから、
SendMessageでWndProcへ構造体をわたそうと思っています。
wParamか、lParamにポインタ入れて。
この構造体を入れる領域をHeapAllocでとって、そこに値を入れてSendMessageで渡した後、
WndProcで処理した後、HeapFreeで開放してやりたいのですが、
開放するタイミングはWndProcしかないのでしょうか。
WndProcへwParamとか、lParamでわたってくるマウスの情報とかは、
WndProcで開放しないのでなんかお作法みたいなのがあるように思えますが、
なにか標準のお作法がありますでしょうか。
お作法、または、ドキュメントへの道しるべ等お教えいただけないですか。

239 名前:デフォルトの名無しさん :2006/11/20(月) 20:36:47
もしかして、SendMessageを呼び出した後は、
イベントがWndProcで処理されるまで戻ってこないので、
−メモリ確保
−SendMessage(ここから投げたスレッドはブロック)
−−メインのGetMessageで取得されて、WndProcで処理される
−SendMessageから戻ってくるのでメモリ開放
といった形になるのでしょうか?
とりあえず、AdvancedWindowsの第26章をみてます。

240 名前:デフォルトの名無しさん :2006/11/20(月) 20:43:23
SendMessageで送信したメッセージの処理内でしか使わないのなら
SendMessageから帰ってきたところで消せばいい

ちなみにSendMessageはGetMessageで取得じゃなくて、SendMessageが直接プロシージャを呼ぶ

241 名前:デフォルトの名無しさん :2006/11/20(月) 20:51:19
>240

>SendMessageで送信したメッセージの処理内でしか使わないのなら
>SendMessageから帰ってきたところで消せばいい
ありがとうございます。
確信がなかったのですが、自信が持てました。

>ちなみにSendMessageはGetMessageで取得じゃなくて、SendMessageが直接プロシージャを呼ぶ
AdvancedWindowsをちゃんとよんでみたら書いてありました。
スレッド間でのSendMessage呼び出しは複雑だと知り、勉強になりました。
ご指摘、ありがとうございました。

242 名前:デフォルトの名無しさん :2006/11/21(火) 00:30:29
>メインのGetMessageをまわしているループとは別のスレッドから、SendMessage
する状況なら、
>ちなみにSendMessageはGetMessageで取得じゃなくて、
>SendMessageが直接プロシージャを呼ぶ
は間違いだよ。それは同一スレッドの時限定。

243 名前:デフォルトの名無しさん :2006/11/21(火) 01:02:03
でもそんな感じだと思っていて構わないと思う。
Advanced Windows読むまで知らなかった。

244 名前:デフォルトの名無しさん :2006/11/21(火) 01:25:56
実は16bitWindowsの頃からGetMessageで取得していた

245 名前:デフォルトの名無しさん :2006/11/21(火) 10:07:07
ヘッダ見てるといろんな構造体にbiSizeとかcbSizeとか構造体のサイズを設定するところがありますがこれって何のためですか?
構造体を渡す側はsizeof(構造体)でこのセットするサイズわかるし渡される側も構造体がわかってるからsizeof(構造体)でとれますよね

246 名前:デフォルトの名無しさん :2006/11/21(火) 10:23:12
>>245
後で拡張されてサイズが増える場合があるから

247 名前:デフォルトの名無しさん :2006/11/21(火) 11:27:43 ?2BP(200)
>>245
最後に char hoge[1] みたいな可変長メンバのプレースホルダがあったりして
sizeof では正しいサイズを得られない場合があるから。

248 名前:デフォルトの名無しさん :2006/11/21(火) 13:40:05
構造体によっては、コンパイル時の_WIN_VERの値で使用可能なメンバの数が変わったりする
そうなると当然構造体のサイズも変わる
おk?

249 名前:デフォルトの名無しさん :2006/11/21(火) 14:27:23
でも、NOTIFYICONDATAとか結構ぐだぐだだよな。
同じ名前を流用するより、
OSVERSIONINFO/OSVERSIONINFOEXみたく、
個別に構造体を定義したほうがスマートに見える。

250 名前:デフォルトの名無しさん :2006/11/21(火) 14:31:14
まぁ、俺らがここでそれを言っても
MSがそれに気付いてやってくれないとどうにもならないからな・・・


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