Win32API 質問箱 Build5
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGやさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。
前スレ
Win32API 質問箱
http://pc.2ch.net/tech/kako/991/991576947.html
Win32API【2】
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API 質問箱 Build3
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API 質問箱 Build4
http://pc3.2ch.net/test/read.cgi/tech/1023361418/
参考
MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/index.html
0166デフォルトの名無しさん
NGNGPAGE_NOCACHE
が怪しい。こんなものはまず使わん。
0167166
NGNG0169151
NGNGケコーンおめでとうございます。
ちょっと簡略化の為に嘘書いてました。
要求サイズをページサイズ分に切り上げる処理を書き間違ってて
中途半端なサイズを要求していた事が原因でした。
で、やっぱり VirtualProtect でサイズを変えることは出来ないんでしょうか?
0170コギャルとHな出会い
NGNG朝までから騒ぎ!!
小中高生
コギャル〜熟女まで
メル友
i/j/PC/対応
女性の子もたくさん来てね
小中高生大歓迎です
全国デ−トスポット情報も有ります。
全国エステ&ネイル情報あります。
激安携帯情報あります。
どうやっても無理。おとなしくmalloc/free使っとけって。
0172デフォルトの名無しさん
NGNG自分ででっかいプールをつくったら?
0173151
NGNGやっぱり Heap系じゃないと増分は無理なんですか?
そういう書き方だと教えてくれてるのか煽りなのか区別がつかないもので…。
>>172
でっかいプールを作るのに VirtualAlloc を使いたいんですよねー
0174デフォルトの名無しさん
NGNGグラフを書きたいといって、
右端で直線を引きながら
BitBlt(memdc, 0, 0, 520, 460, memdc, 1, 0, SRCCOPY);
(memdcは裏画面のデバイスコンテキスト)
というようにすれば右から左に流れるような直線が書けると
教えていただいたのですが、これだとやはり時間がかかってしまいます。
何か高速な画面の移動の方法は無いでしょうか。
0175デフォルトの名無しさん
NGNGXOR
0176デフォルトの名無しさん
NGNGなるほろ.
しかしそれではせっかく設定したリージョンが..
0177デフォルトの名無しさん
NGNG早レスありがとうございます。
XORっていうのは、
LineToを呼んで、背景色と色AのXORの色Bで直線を描画して、
今度は色Bの上から色Aで描画すれば背景色に戻る
っていうので合ってるでしょうか?
LineToを何度も呼ぶことになると思いますが、その方が高速なんでしょうか。
煽っているつもりは全くないのだが。
VirtualProtectはメモリの保護モードを変更するものなので、
サイズを変更することはできない(てか、ヘルプ読めよ)。
unixのbrkのような使い方をしたいのであれば、
あらかじめVirtualAllocで巨大な領域をreserveしておいて、
必要になった時点でcommitすることで、似たような動作にすることはできる。
単にクラスを識別するだけの役割しかないのに、
文字列の内容が関係すると思うか?
0181デフォルトの名無しさん
NGNG増やすときに、VirtualAllocの lpAdressに、予約済み領域の直後のアドレスを
指定(ページ境界に注意)してやればいいのでは?
0182デフォルトの名無しさん
NGNG試してみりゃ分かるやろ。
0184151
NGNG> サイズを変更することはできない(てか、ヘルプ読めよ)。
「要求するメモリのサイズ」って書いてあった(VirtualAllocで指定したサイズでなければいけないとは書いてなかった)ので
変更は可なのかなー等と思ってしまいました。
> あらかじめVirtualAllocで巨大な領域をreserveしておいて、
> 必要になった時点でcommitすることで、似たような動作にすることはできる。
なるほろ!これは気がつきませんでした。
ありがとうございます。
>>173
ありがとうございます。その手もありますね。
しかしライブラリ等の弄れない部分がOSからメモリー割り当てしてると失敗してしまいますね…(当たり前ですけど)
ポインタ比較に意味無くなってもいいからヒープ毎に独立したアドレス空間欲しぃ…。
とりあえず >>178 さんのアドバイスを元に頑張ってみようと思います。
皆さんありがとうございました。
0185デフォルトの名無しさん
NGNGScrollWindowとかScrollDCとか
0186DOSっていいな
NGNGこれと同じようなことをWindowsからできないのでしょうか。
別プロセス空間に2Gバイト近くのメモリーをそれぞれ確保しており、合計で
6Gバイト以上のアドレスを確保しています。この別プロセスのメモリーを共
有メモリーでランダムアクセスしたいのですが、
1:OpenProcessからReadProcessMemory, WriteProcessMemoryでは一旦コピー
してからのアクセスになるためランダムアクセスに向きません
2:ファイルマッピングでメモリーファイルにすると、アドレス空間が2Gバイ
トに限定されるため、大量に取得したメモリー全部にアクセスすることがで
きません。
別プロセスのメモリー空間のポインタを取得する(実アドレスに割り当てる)
APIってないでしょうか。
0187デフォルトの名無しさん
NGNG6Gの仮想メモリで何がしたいねん?
結局は単一の物理メモリやん。
0188デフォルトの名無しさん
NGNGwin32でできたっけ?
VirtualAllocVlmとか。
0190DOSっていいな
NGNG各プロセスはリニアに32ビット(4Gバイト)のアドレスしかアクセス
できませんが、(実際はOSの都合で2Gバイトしか確保できない)
別プロセスではそれぞれのセレクタが別の物理メモリー空間をアドレス
するようになります。
この辺はOSの仕事ですが、実際に確保できてしまいます。
>>186
たとえば、スキャナからの画像を9600BPIでA3全体を読み込むと
数Gバイトになります。もちろん今作っているのは、こんな馬鹿
みたいなこととは違いますが。。。
0191デフォルトの名無しさん
NGNGOSのメモリ管理限界より、実メモリが増えてなきゃ、
そもそも意味がないだろ。
0192DOSっていいな
NGNG確かに。
メモリーは誰かが金出して、10Gバイトくらい載るマザーボードと
メモリーを用意するだろう。
インテルCPUではFS,GSのセレクタレジスタが遊んでいるので、
それぞれ別空間をポイントできないかと考えたわけだ。
あるいは、OSからすれば、ページングで同じ物理メモリーを2つのプ
ロセスのリニアアドレスに割り当てればよいことで、簡単にバンク切り
替えができるのかと思って調べたが、見当たらなくてここで質問してい
ます。
0193デフォルトの名無しさん
NGNG> で、やっぱり VirtualProtect でサイズを変えることは出来ないんでしょうか?
MSDN Library を読んだ上で言ってるのか?
VirtualProtect は割り当てられたページの属性 (read/write/execute) を設定
する API。CPU がサポートする仮想記憶システムで使うデータベース(ページ
テーブルやディレクトリテーブル)の属性部分だけ仮想化したもの、といや良い
のかな。
俺も試したことはないんだが >>189 が言ってるように VirtualAllocVlm 系の
API を使うか、ファイルマッピング (CreateFileMapping) とかでどうかねぇ。
>>191
IA-32 だと、仮想記憶アドレスの限界以上の実メモリを使える。36bit PSE あ
たりのキーワードで検索すると出てくると思うけど。
0194DOSっていいな
NGNGVirtualAllocVlmって、64ビットのアドレスが返るのですね。
Borland C++Builderを使っているのですが、どうやって使う
のでしょうか。
0195デフォルトの名無しさん
NGNGgoogle で検索したら、トップで出てきたぞ…。
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_virtualallocvlm.htm
0196デフォルトの名無しさん
NGNG特許は最近話題になったものだけにあるわけではないぞ
0197151
NGNG私の質問はもう終わってるんだけどな…。
直後に似た API の質問だから混同してもしょうがないけど。
でもやっぱり後でもう一回来てよかった。
なんかその Vlm ってのも調べてみようっと。
あと、>>178 さんに教えてもらったやり方でバッチグーに実装できました。
マジでありがとうございました。
0198151
NGNGhttp://www.microsoft.com/japan/developer/library/jpwinpf/_win32_virtualallocvlm.htm
VirtualAllocVlm 関数は専用のリソースを割り当てるので、控えめに使ってください。
~~~~~~~~~~~~~~~~~~~~~~
↑ワロタ MS のドキュメントにしては珍しいあからさまに曖昧な表現。
0199デフォルトの名無しさん
NGNG>2:ファイルマッピングでメモリーファイルにすると、アドレス空間が2Gバイ
> トに限定されるため、大量に取得したメモリー全部にアクセスすることがで
> きません。
うそー?MapViewOfFile でマップするファイル位置を指定出来ただろ?64ビットで
0200デフォルトの名無しさん
NGNGWindowsから警告音が来てしまうんですが、
これを止める方法はないでしょうか?
0201デフォルトの名無しさん
NGNGMapViewOfFileEx() の方かね。
いずれにせよ返ってくるのは LPVOID だから「大量に取得したメモリー全部に
アクセスすることができない」と思うが、そこは手作業でファイルマッピングの
切り替えだろう。
(狭い仮想アドレスを使い回す以上、バンク切り替え相当の手間が掛かるのは、
仕方ないよな)
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNG犯罪の匂いがする
0204デフォルトの名無しさん
NGNGいえ、そういうのじゃないですよ。
レジストリの特定のキーを削除したいんです。
とりあえず今考えてるのはレジストリをいじるだけのプログラムを作ってお
いて、それを別ユーザとして起動すればいいかな〜って思ってるんですが、
もう少しスマートな方法がないかと思いまして。
0205デフォルトの名無しさん
NGNG> レジストリの特定のキーを削除したいんです。
なぜ?
一般論として言えば、Administrator しか削除できないキーを一般ユーザが削除する
のは(仮にできたら)、致命的なトラブルになるぞ。本当に必要なら、そのユーザに
ローカルマシンの Administrator 権限を付与するのが正道と思われ。
0206デフォルトの名無しさん
NGNGそれでは、Administratorでない場合はどうでしょう?
他のアプリケーションの設定などを別ユーザからいじるということはできますか?
0207デフォルトの名無しさん
NGNG必要ならAdministrator権限をもらえって事だよ
そんな簡単に権限無視が出来るんじゃなんのためのユーザー管理だよ
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNGttp://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/Japan/s
upport/kb/articles/JP253/0/66.ASP
だから何だと言われても困る。
0211デフォルトの名無しさん
NGNGWindows2000でファイルを選択してマウス右ボタンのプロパティから概要タブで
タイトルやコメントとかを設定できますけど、
あれってどこに記録されているのでしょう & 設定するAPIはあるのでしょうか。
0212デフォルトの名無しさん
NGNGの下の方にある、福次ストリームを利用しているはず。
0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNG詳しく調べてないけどたぶんIPropertyStorageを使うんだと思う
http://msdn.microsoft.com/library/en-us/stg/stg/ipropertystorage_ntfs_file_system_implementation.asp
0215デフォルトの名無しさん
NGNGダイアログテンプレートで作成することはできますか?
なんかDLGITEMTEMPLATEの中はクラス名かIDが必要みたいなんですが、
ここにダイアログを直接置くことはできないんですか?
0217StretchDIBits
NGNGIMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
GetObject(hBitmap, sizeof(BITMAP), &bmp_info);
wx = bmp_info.bmWidth;
wy = bmp_info.bmHeight;
hdc_mem = CreateCompatibleDC(hdc);
SelectObject(hdc_mem, hBitmap);
StretchDIBits(hdc,0,0,wx, wy,
0,0,wx, wy,
pBits,&bmp_info,DIB_RGB_COLORS,SRCCOPY);
とした場合最終行のpBitsには"DIBのビットデータの先頭へのポインタ"
をいれるという説明なのですが,これはどうやって取得できますか?
0218API学くん
NGNGリッチエディットコントロールをSDKのC言語で組もうとしてる者です。
EDITSTREAM構造体のdwCookieとpfnCallbackメンバを設定して、
EM_STREAMINメッセージでストリームにデータを送ってリッチエディット
コントロールに表示させるらしいという事がわかりました。
しかし実際に表示させようとしても、やり方がわかりません。
具体的に言うとchar goku[30]="こんにちは"という、メモリ上のデータを
表示させようとするときdwCookieに何を指定するのか分かりません。
es.dwCookie = (DWORD)goku;のように指定しても駄目でした。
ファイルを読み込んでそれを表示する事は出来るのです。
dwCookieにCreateFileで作成したhFileを指定すれば、ファイルの内容が
リッチエディットコントロールに表示されました。
es.dwCookie = (DWORD)hFile;
という感じで大丈夫でした。
ネット上で調べたのですが情報がありません。
メモリ上のデータをリッチエディットコントロールに表示するにはどうすれば
いいか教えて下さい。
0219デフォルトの名無しさん
NGNGコピペじゃ駄目?
CHARRANGE cr;
cr.cpMin = cr.cpMax = -1;
SendMessage(hRich,EM_EXSETSEL,0,(LPARAM)&cr);
SendMessage(hRich,EM_REPLASESEL,0,(LPARAM)"こんにちわ");
SetWindowText(hRich,"こんにちわ");
でもいいかも。
参考→ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_130.htm
0220デフォルトの名無しさん
NGNGStretchDIBits() → StretchBlt() じゃないの?
0221デフォルトの名無しさん
NGNG0222デフォルトの名無しさん
NGNGPlatform SDK にドキュメントついてきたと思うが。英語だけど。
0223API学くん
NGNGコピペという方法があったのですね。
リッチテキストを扱うからエディットストリームだという固定観念で調べてました。
普通のエディットコントロールも知らないで、いきなりリッチエディットを
作ろうとしたのが勘違いの元でした。
どうもありがとうございました。
0224APIビギナー
NGNGに落とすにはどんな方法がありますか?
0225デフォルトの名無しさん
NGNG2000/XPではCAPTUREBLTをお忘れなく
0226デフォルトの名無しさん
NGNGMSDNに入れば、「Subscriber Downloads」でダウンロードできるよ(藁
0227APIビギナー
NGNG>2000/XPではCAPTUREBLTをお忘れなく
を,どうも.猫でもできる,を参考にしてやって見ます.
ところでウィン98だと選択の度にWM_PAINTで書きなおして表示されて
いた画像が,Xpだと全く更新されないままになるってのは
何が原因でしょうか.
0228デフォルトの名無しさん
NGNGダイアログテンプレートで作成することはできますか?
なんかDLGITEMTEMPLATEの中はクラス名かIDが必要みたいなんですが、
ここにダイアログを直接置くことはできないんですか?
0229デフォルトの名無しさん
NGNG"外部参照 1 が未解決です。"
みたいなメッセージがでてきてエラーになるんですが、
そのまま元に戻す方法だれか知りませんか?
0231デフォルトの名無しさん
NGNG取りあえず他のスレにまで迷惑かけるなって。
0232デフォルトの名無しさん
NGNG>>230
すまんが意味がまったくわからん。
もう少しわかりやすい日本語を話してくれ。
0233デフォルトの名無しさん
NGNGOSボム
http://pc3.2ch.net/test/read.cgi/tech/1029678513/l50
ここのネタだよ。気にしなくていい。
日本語?
まぁお前ら天才だからこれくらいの日本語理解できるんとちゃうん?
お前は天才じゃなかったか。スマソ
>231->233
ここはWin32API質問箱だぞ?
スレに関係ない話題はやめろ荒らしめ
0235デフォルトの名無しさん
NGNGDELLさん、逆ギレですか?
0236DELL
NGNGとにかく、230の質問が解ればそれでいいのだ。
隣でVisualC++開いている。
2chで問題が解決すれば得だろ?
0237デフォルトの名無しさん
NGNG図星でした。
0238デフォルトの名無しさん
NGNGお前さぁ、自分で考えて書いたんじゃなかったのか?なぜコンパイルできん?
また、
どこかで見つけたブラクラを書き込め!
系のこの板でもっとも頭の悪い部類に入るスレかよ・・・。
0239DELL
NGNGお前さぁとか偉そうなこといってねぇで、
そのまま実行できんかったらコードを
新規作成したファイルにコピーすればコンパイルできることに気づけよ。
まぁ確かに俺の書いたコードは下らないものかも知れないが、
別にここはプログラム技術板なんだからブラクラより
マシだと思うぞ。
0240デフォルトの名無しさん
NGNG(劇藁嘲笑
0241デフォルトの名無しさん
NGNG0242DELL
NGNGなるほど参考になりました。
0243デフォルトの名無しさん
NGNG0244DELL
NGNG必死だな(藁
0245デフォルトの名無しさん
NGNGうわああああ
dumpbinも知らん
mlも使えない
スーパーDQNだぁぁぁぁ
HNのとおりデリられるべき香具師だな
0246デフォルトの名無しさん
NGNGHDCについて教えてください。
hDC = GetDC( hWnd );
hDCMem = CreateCompatibleDC( hDC );
hBmp = CreateCompatibleBitmap( hDC, 64, 64 );
SelectObject( hDCMem, (HGDIOBJ)hBmp );
上のコードの後に、
GetDIBits( hDC, hBmp, … );
としても、
GetDIBits( hDCMem, hBmp, … );
としてもうまく動きます。これはどういうことなのでしょう?
HDCならなんでもいいのでしょうか?
(ちなみに、NULLだとうまく動きませんでした)
0247デフォルトの名無しさん
NGNGどういうことも何も、
hDCMemはCreateCompatibleDCで作ったんだから、
hDCと互換性があるに決まってる。
試したことないけど、
やっぱ、プリンタのHDCとか使ったら駄目じゃない?
0248246
NGNG動作に互換性があるのはわかるのですが、
>SelectObject( hDCMem, (HGDIOBJ)hBmp );
としているわけですから、
GetDIBits( hDC, hBmp, … );
でうまくいくのが不思議に思いまして。
GetDIBItsやSetDIBitsの場合、デバイスコンテキストに
設定した値(SelectObjectで指定したオブジェクトなど)は
全く影響なしということでいいのでしょうか?
0249247
NGNGhttp://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_getdibits.asp
によると、
「hbmp パラメータが示すビットマップが
デバイスコンテキストで選択されている場合、
この関数を呼び出さないでください」とあるんだが。
疑問の解消にはならないかも知れないが、
そういうことはしてはいけないらしい(逃
0250デフォルトの名無しさん
NGNGCreateDIBSection() と同じで、DIB_RGB_COLORS である限りは HDC は
まったく参照されないんじゃなかったっけ? (HDC は NULL でいい)
0251デフォルトの名無しさん
NGNGリストボックスに、文字を追加して行きたいと思い下記のようなコードを打ちました
SendDlgItemMessage( hWnd, IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)Buff );
たしかに、文字はリストボックスに追加されたのですが、どんどん追加していくと
スクロールバーができ、入力している文字がリストボックスから見えない位置に
いってしまいます。
最後に出力した文字が、常に見える状態にするにはどうすればよいのでしょうか?
MFCだと、SetCurSel( m_ctl.GetCount()-1 );
でいいみたいなんですが、apiだとどうして良いのか、分かりません・・
0252デフォルトの名無しさん
NGNGそこまでわかっているならGoogleで
SendDlgItemMessage SetCurSel
で見つかる予感 ->
ttp://n76cd-01p05.ppp11.odn.ad.jp/old/a6050.html
これでいいんじゃないでしょうか。
0253デフォルトの名無しさん
NGNGerror C2065: 'CreateJobObject' : 定義されていない識別子です。
っていわれちゃう。
なんでだよヽ(`Д´)ノウワァァァァン
#include <windows.h>
#include <winbase.h>
#pragma comment(lib,"kernel32.lib")
int main(int argc, char* argv[])
{
HANDLE hJob = (HANDLE)CreateJobObject(NULL, "testjob");
return 0;
}
0254デフォルトの名無しさん
NGNGCreateJobObject は Windows 2000 以降の API だけど、
ちゃんとそれに対応した新しい Platform SDK 使ってるかね。
0255デフォルトの名無しさん
NGNGヘルプに
>対応情報
> Windows NT: バージョン 5.0 以降を使います。
って書いてあるよね。
実行環境のWindowsのバージョンに依存するときは、
_WIN32_WINDOWSや_WIN32_WINNTというマクロが必要だよ。
↑
をヘルプで引いてごらん。
#define _WIN32_WINNT 0x0500
とか、
>Visual C++ 6.0: To specify compiler options,
>go to the Projects menu and click Settings,
>then select the C/C++ tab.
とか、することになってるよね。
0256デフォルトの名無しさん
NGNG>「hbmp パラメータが示すビットマップが
>デバイスコンテキストで選択されている場合、
>この関数を呼び出さないでください」とあるんだが。
あ、本当だ。見落としてました。(^^;
>>250
>CreateDIBSection() と同じで、DIB_RGB_COLORS である限りは HDC は
>まったく参照されないんじゃなかったっけ? (HDC は NULL でいい)
なるほど、HDCはパレットの情報を得るのに使っているんですね。
調べてみると、SetDIBitsのところにも、NULLでいいと書いてありました。
ところが、実際にNULLを指定すると、なぜかエラー(戻り値=0)が
返ってきます。他のパラメータが間違っているのかな???
GetDIBits・SetDIBitsの前後を調べてみることにします。
とりあえず、ありがとうございました。>>247 >>249 >>250
0257デフォルトの名無しさん
NGNGよく読め
>>246はNULLだとダメだったとちゃんと言ってるぞ
GDI関数で第一引数にHDCを取るものは
どのドライバを呼び出すか決めるためにHDCを使うんだから
この場合ディスプレイドライバが作ったHDCならなんでもいいけど
NULLはダメ
0258256
NGNG>調べてみると、SetDIBitsのところにも、NULLでいいと書いてありました。
正確には、「無視されます」とあり、
「NULLでもいい」と書かれてあったわけではありませんでした。
失礼。
0259デフォルトの名無しさん
NGNGWin32APIだけで組めばプログラムのファイルサイズがかなり小さくなると
思ったのですが、実際にダイアログリソースを表示するだけの簡単なプログラムを
作ってみるとMFCで共通DLLを使ったものよりも大きくなってしまいました。
MFC(共通DLL使用)→28KB
Win32API→44KB
こんな具合です。
もうちょっと(せめてMFC版よりも)サイズを小さくするにはどうしたらよいのでしょうか?
0260デフォルトの名無しさん
NGNG必要な処理をDLLに持っていって本体はWinMain()のみにする。
0261デフォルトの名無しさん
NGNG0262デフォルトの名無しさん
NGNGサイズの比較になってねーぞ
MFC(共通DLL使用)→28KB + sizeof MFC42.DLL
0263デフォルトの名無しさん
NGNG#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
keybd_event(VK_SNAPSHOT,0,0,0);
return 0;
}
昨日も聞いたんだけどサー,これでデスクトップのショットが取れないのはなぜ?
アクティブウィンドウしか取れない. alt 押してないのに.
証拠画面もうぷするか?
0264デフォルトの名無しさん
NGNGそんなことせんでもGetDC(0)したのをBitBltすれば良かろう。
つぅか誰にそのキーイベント送ってるのさ?
0265デフォルトの名無しさん
NGNGupx --best --crp-ms=100000 filename
とかどうよ?
■ このスレッドは過去ログ倉庫に格納されています