[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 07/09 05:34 / Filesize : 231 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build59



1 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:39:56 ]
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

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

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


830 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 20:35:39 ]
>>814
俺はWTERMの人が書いた本でWindowsプログラミングの勉強をしたが
それがたしかWindows1.0用の本で、ほとんどそのまま3.1で通用したよ。
3.1から95もAPIはほとんど一緒だから、GetMessageとかのAPIは
ずっと変わってないと思う。

831 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 22:22:09 ]
だってある意味winプログラムの原点だからGetMessageの概念は

832 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 22:58:06 ]
イベントドリブンはナムコが考えました

833 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 22:58:18 ]
友達がいなくて
携帯メールがGetMessageできない漏れをどうにかしてください

WinSockムズカシス

834 名前:デフォルトの名無しさん [2007/11/30(金) 23:07:00 ]
GlobalAllocで確保されるメモリって、自プロセス内のスタック領域?とかいうところから拾ってきてるの?
ファイル読み込みで、何度かGlobalReAllocを繰り返し呼び出して、再確保を繰り返しやると
18000Byte超えたあたりで、メモリの再確保に失敗する
なんでだろう

835 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 23:09:28 ]
>>833
自分で自分のアドレスにPostMessageする

836 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 23:10:48 ]
>>834
MSDN嫁よ禿

837 名前:デフォルトの名無しさん [2007/11/30(金) 23:14:37 ]
>>836
英語だからミリだよ

838 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 23:19:22 ]
たしかにな



839 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 23:28:12 ]
>>837
英語勉強しろよ禿

840 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 23:31:14 ]
「Windowsプログラミングの極意」あるいはThe Old New Thingで
いってたけど、今は、メモリ共有のために仕組みがある以外は、
ローカルヒープとあんましかわらない、みたい。

841 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 23:42:12 ]
WinXP SP2だと、1Kから1バイトずつ伸ばしても全然失敗しないな……
フラグの指定がおかしいんじゃね?

ちなみに可変長のGlobalヒープが欲しい時は、
CreateStreamOnHGlobal + GetHGlobalFromStream がお勧めだ。

842 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 23:43:23 ]
16KBのメモリチャンク云々って話をどっかで見た気がするが忘れた。

843 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 00:08:13 ]
同じくWinXP SP2、初期サイズ1KB、増加サイズ1KBずつだと4KBで失敗。GetLastErrorは8。
増加サイズが変わると失敗するサイズも変わる。法則は謎。
GMEM_MOVEABLEすればもちろん失敗しないけど。

844 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 00:28:01 ]
ちょっとコード晒せ

845 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 00:47:55 ]
>>816
ゲンミツに言うとCreateWindowEx呼んでるだけだったような気もするけど

846 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 00:56:31 ]
HeapAlloc/HeapReAllocだとどうなる?

847 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 01:38:24 ]
>>845
手元のWin16APIヘルプだと
CreateWindow(2.x)
CreateWindowEx(3.0)
って書いてあった。

848 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 02:33:48 ]
取り込んだ画像を任意の角度に回転させるAPIってありますか?



849 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 03:11:05 ]
GDI+

850 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 06:48:51 ]
>>813
NTの最初のバージョンは3.1だが?
NTじゃないWindows 1.0がマルチスレッドやUnicodeに対応しているわけないし

851 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 10:12:50 ]
GlobalReAllocで固定メモリの領域拡大に失敗するのか
まさか単に断片化しているだけというオチじゃなかろうな

852 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 10:13:53 ]
また随分とバックパスなw

>>850
>>813は1.0時代のAPIだって今はUnicode版があるって言ってる
当たり前といえば当たり前

853 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 10:27:48 ]
GlobalAlloc懐かしいな。

854 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 11:37:40 ]
>>851
それが原因な気がするけどなー
toolhlpとかプロセスメモリエディタで覗いてみたら良いんでは

855 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 11:50:50 ]
そもそもGlobalAllocなんてクリップボードとOLEドラッグ以外に使うべきでは無い
どうせ猫でも見て変な知識付けたのだろうが

856 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 12:16:36 ]
HeapAlloc(malloc)か、サイズが数MB超えるならVirtualAlloc使えよ。



857 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 13:06:37 ]
そういう話は>>836で終わってる。

858 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 13:35:10 ]
英語が読めないので>>837で再開



859 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 15:22:23 ]
1.xの遺物 AnyPopup();

860 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 15:33:01 ]
WS_CHILDで子コントロールとして貼り付けられたダイアログって
親ウインドウが破棄されると自動的に破棄されますよね?

861 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 15:49:13 ]
いいえ

862 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 15:51:44 ]
DestroyWindowの解説に書いてある

863 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 15:53:45 ]
はい

864 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 16:07:53 ]
>>852
そりゃWin32で代わりがないAPIについてだろ。
_lcreatとかOpenFileとかにUnicode版はない

865 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 18:27:11 ]
PIDLがデスクトップを指してるかどうかって、
ILGetSizeを使って2byteかどうかで判定していい?

866 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 18:45:29 ]
>>865
SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP) + ILIsEqual()で判断するのが安牌

867 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 19:36:01 ]
CreatePrivateObjectSecurityWithMultipleInheritance
nagasugi warota

868 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 20:19:00 ]
>>866
ども。そうだよね



869 名前:834 [2007/12/01(土) 21:48:40 ]
こんなに大勢が答えてくれるなんてありがてぇありがてぇ

コードはこうなってるが、素人なんで汚いだろうけど
#define CHUNK_SIZE 1024
bySrc = GlobalAlloc(GPTR, 1);
iCount = 0;
dwTotal = 0;
do{
ZeroMemory(byTemp, CHUNK_SIZE + 1);
if(InternetReadFile(hUrl, byTemp, CHUNK_SIZE, &dwRead) == FALSE){ //失敗したら
  MessageBox(hwnd, TEXT("読み込みに失敗しました。"), TEXT("InternetReadFile Failure"), MB_OK | MB_ICONWARNING);
return -1;
}
dwTotal += dwRead;
bySrc = GlobalReAlloc(bySrc, dwTotal + 1, GMEM_MOVEABLE);
if(bySrc == NULL){
wsprintf(szBuffer, TEXT("%d 回目の読み込みで、計%dByte(新たに%dByte)の確保に失敗しました。"), iCount + 1, dwTotal, dwRead);
MessageBox(hwnd, szBuffer, TEXT("GlobaReAlloc Failure"), MB_OK | MB_ICONWARNING);

GlobalFree(bySrc);
return -1;
}

memcpy(bySrc + (CHUNK_SIZE * iCount), byTemp, dwRead);
iCount++;
}while(dwRead);

で、そのまま強制終了になったり、運がよければ「("20回目の読み込みで、計19984dByte(新たに1024Byte)の確保に失敗しました。」みたいな感じのエラーが表示される
なんでかわからん



870 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 21:57:04 ]
>bySrc + (CHUNK_SIZE * iCount)

とりあえずこれがだめなんじゃない?
毎回CHUNK_SIZEずつ読めてるとは限らないんだし

871 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 22:12:30 ]
>>869
だからそういう目的ならmalloc/realloc使えと言ってるだろうが

872 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 22:21:29 ]
>>869
>bySrc = GlobalReAlloc(bySrc, dwTotal + 1, GMEM_MOVEABLE);
同じ変数で結果を受け取ると、NULLが返ってきたときに元の領域を解放する手段が
なくなってしまってメモリリークする。reallocを使った場合も同様なので注意。

873 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 22:46:57 ]
>>870
もろにセキュリティホールだよね。

874 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 23:14:54 ]
> ZeroMemory(byTemp, CHUNK_SIZE + 1);
これは大丈夫なのか?byTempの宣言が書いてないから分からんが

875 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 00:01:49 ]
            祝

 ☆ 国 取 り 1 6 0 人 到 達 ☆ 



876 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 00:04:05 ]
何?

877 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 01:15:57 ]
桂蚕糸?

878 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 05:24:18 ]
XNResourceEditorって境界線の無いダイアログ作れないのかな
ちゃんと設定してもどうしても境界線が残るんだが



879 名前:834 [2007/12/02(日) 07:46:48 ]
おまいらなんでこんなに優しいん?
普段ボロクソ言われてるってのに(涙

一応宣言はこうなってる
BYTE byTemp[CHUNK_SIZE + 1];
static BYTE *bySrc;

それから >同じ変数で結果を受け取ると、NULLが返ってきたときに元の領域を解放する手段が
なくなってしまってメモリリークする の部分を改善してみた
bySrc = GlobalReAlloc(bySrc, dwTotal + 1, GMEM_MOVEABLE);
if(bySrc == NULL){
wsprintf(szBuffer, TEXT("%d 回目の読み込みで、計%dByte(新たに%dByte)の確保に失敗しました。"), iCount + 1, dwTotal, dwRead);
MessageBox(hwnd, szBuffer, TEXT("GlobaReAlloc Failure"), MB_OK | MB_ICONWARNING);

GlobalFree(bySrc);
bySrc = NULL;
return -1;
}

あと、>bySrc + (CHUNK_SIZE * iCount) の部分

memcpy(bySrc + dwTotal - dwRead, byTemp, dwRead);
としたら、すべてうまくいきました!!!!!!!!!!!!!!!うれしいっす!!!

芋くさいコードだけど、晒してよかった・・
ひとつ問題が解決すると、ほんとに気持ちがいいな
ありがとうな。お前ら



880 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 07:55:50 ]
FillMemoryの4バイト版ってあったりしますか

881 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 08:16:45 ]
>>879
>static BYTE *bySrc;
使い方から見てstaticで宣言する意味なくね?

>bySrc = GlobalReAlloc(bySrc, dwTotal + 1, GMEM_MOVEABLE);
改善されてないじゃん。こうだろ。
BYTE *byNewSrc;
byNewSrc = GlobalReAlloc(bySrc, dwTotal + 1, GMEM_MOVEABLE);
if (byNewSrc) {
bySrc = byNewSrc;
} else {
wsprintf.....略
}

882 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 09:21:06 ]
>>880
無いです
そのくらい自分で書け

883 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 12:25:26 ]
memset(buf,0,4);
FillMemory(buf,4,0);

884 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 12:58:49 ]
それちゃうやろw

885 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 13:04:22 ]
#if defined(RtlFillMemory)
#undef RtlFillMemory
EXTERN_C VOID WINAPI RtlFillMemory(
IN VOID UNALIGNED *Destination,
IN SIZE_T Length,
IN UCHAR Fill);
#endif
こうしておかないとダメってことか


886 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 15:03:34 ]
>>880
rep stosd

887 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 17:24:48 ]
教えてください。
自分自信のウィンドウハンドルを取得するには
FindWindowとEnumWindowを使わず取得する方法ってありますか?

888 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 17:26:54 ]
自分自身のウィンドウハンドルは自分で作ったんだからわざわざ取得しなくても最初から知ってるはずでは



889 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 17:27:17 ]
>>887
WM_CREATEで保存しとけ

890 名前:887 mailto:sage [2007/12/02(日) 18:41:21 ]
>>888,889
そういうのではなくてDLLでロードされたタイミングでそのDLLが
マップされたプロセスのウィンドウハンドルを取得するという作りなので
WM_CREATEとかでは無理なのです。

GetCurrentProcessId+EnumWindowsで取得という手もあるんですけど
他にやり方がないのかなと思ってレスしてみました。
因みにGetForegroundWindow、FindWindow以外のやり方でお願いします。

891 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 18:42:04 ]
ねーよ

892 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 18:44:21 ]
質問です
このスレに女性はいますか?

893 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 18:50:17 ]
>>890
ファイルマッピング

894 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 18:51:33 ]
たまに書く程度の女性なら、います。

895 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 19:52:56 ]
>>890
プロセスにウィンドウが複数存在したらどうする?

メインプログラムで「渡したいハンドル」を保管し、
DLLの初期化ロジックに渡した方が簡単だし、確実。


896 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 19:53:55 ]
>>890
おれらエスパーじゃないんだから、前の書き込みで「DLLで」とかわかるわけないだろ?
あほかw


897 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 19:56:39 ]
エスパーじゃない人には聞いていません

898 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 20:09:05 ]
じゃあここで待ってるといいよ

エスパーが質問に答えるスレ
pc11.2ch.net/test/read.cgi/tech/1187922645/



899 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 21:30:18 ]
ム板にもエスパースレあったのか

900 名前:887 mailto:sage [2007/12/02(日) 23:00:42 ]
>>893
その線ちょっと調べてみる。

>>895
インジェクションなんでそれはちょっと無理ぽ

>>896
正直スマンカッタ

901 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 23:16:43 ]
注入されたプロセスのすべてのスレッドにメッセージフック仕掛ければ、大抵のHWNDはもらえる
相手によってはがむしゃらな量(種類)のHWNDが飛んでくるけどな
ところでメインウィンドウって定義はあるのけ?

902 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 23:20:12 ]
>ところでメインウィンドウって定義はあるのけ?
だれもそんなこと言ってねえよ orz 野球終わったし寝る

903 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 23:40:52 ]
DLLインジェクションっていわゆるフックとかだろ?
対象ウィンドウ(ハンドル)が分かってない状態でのそれ、ってどういう設計なんだ?

904 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 23:51:26 ]
>>896-898
ワロタwww

905 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 00:30:41 ]
そんなに面白くはないとおもう

906 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 00:36:58 ]
まあ笑いのツボは人それぞれだしな。

907 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 00:41:10 ]
何が面白いのかさっぱり分からない

908 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 00:44:51 ]
面白くないと思う



909 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 00:45:53 ]
笑うなとは言わないよ。
ただ、あまりにも世間とずれているようなので、心配になっただけです。

910 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 00:59:14 ]
それはお節介w

911 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 01:01:05 ]
また笑ってる

912 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 01:39:13 ]
掲示板とかでつまらんつまらんって連呼してる奴は
営業とか人付き合いの下手な人

913 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 01:41:23 ]
???

914 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 03:04:46 ]
>>912
私つまらんって連呼する人だけど、
このスレの主旨を考えると、正直別に笑いなんかいらんと思う。
というか害悪。

915 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 17:00:01 ]
IDも出ない板で人に嫌われたって、
自分の一秒後の生活にすら何の影響も及ぼさないからな。

916 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 17:02:33 ]
人に嫌われることに慣れてる人の意見だな

917 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 17:06:26 ]
で  、  こ  の  ス  レ  と  何  の  関  係  が  ?

918 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 17:07:36 ]
>>915
おまえをみなみけの千秋だと思って萌えてやろう



919 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 17:16:33 ]
それは私が至らなかったねえ

920 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 18:37:51 ]
スレ違いにもほどがある。






鮫の話しようぜ

921 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 19:18:01 ]
>>920
前野乙

922 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 19:35:39 ]
英単語一つでできてるAPI名ってSleepとGDIの描画関数いくつかの他にある?

923 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 19:40:01 ]
Beep

924 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 20:15:18 ]
BS_OWNERDRAWを使って外観を変えたいと思っているのですけど、
BS_RADIOBUTTONやBS_CHECKBOXと組み合わせて使えますか?

BS_OWNERDRAWを使って描画を独自に実装した場合は、
ラジオボタンやチェックボックスの動作も独自に実装しなければならないのでしょうか?

925 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 20:18:09 ]
AUTOならかってにやってくれるんじゃない?

926 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 22:06:05 ]
>>894
女性プログラマカッコヨス


927 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 22:07:04 ]
>>924
BS_PUSHBUTTON〜BS_OWNERDRAWは同時に一つしか指定できないから

>ラジオボタンやチェックボックスの動作も独自に実装しなければならないのでしょうか?
これが正解

928 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 00:28:49 ]
ここにいる奴は良くも悪くも貪欲で物好きな奴ばかりだよな
仕事と割り切ってるマのほうが圧倒的。



929 名前:デフォルトの名無しさん [2007/12/04(火) 00:36:45 ]
HttpQueryInfoってどこから情報をとってくるの?
WEBページのサイズを取得しようとしてるんだけど、HTTP_QUERY_CONTENT_LENGTHつけてもテキストの部分のサイズしかとれない
0が返ってくるページも多いしね

930 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 03:51:59 ]
HttpSendRequestしてないとかTransfar-Encodingがchunkedになってるかどちらか

レスポンスの大きさを知るものであってWeb上のファイルの大きさを知るものではない






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<231KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef