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

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

Win32API 質問箱 Build3

1 :デフォルトの名無しさん:02/03/26 01:04
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。

前スレ
Win32API 質問箱
http://pc.2ch.net/test/read.cgi/tech/991576947/

Win32API【2】
http://pc.2ch.net/test/read.cgi/tech/1006783012/

参考
MSDN Online
http://www.asia.microsoft.com/japan/developer/

猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang

939 :デフォルトの名無しさん:02/06/01 22:03
青は #0000FF、黄色は #FFFF00。どっかでデータが反転してるんでしょ。

940 :938:02/06/01 22:52
あ、なるほど〜・・・・・そういえばそうですね
原因さっぱり思いつかないけど、とりあえず
転送順序を逆にしたり色々試してみます〜

941 :931:02/06/02 06:42
>>933
おかげさまでできました。ありがとうデス

942 :デフォルトの名無しさん:02/06/02 15:50
Windowsの、とあるコマンドラインプロセスを実行したいのだけれど、
そのコマンドは実行終了までかかる時間がまちまちなのですが、
実行が終わるまで監視する真っ当な方法ってどうすればいいんでしょう?

WinExecを使うと勝手にタイムアウトする可能性があるので、
CreateProcessで立ち上げ、
while(GetExitCodeProcess(....),exitcode==STILL_ACTIVE)Sleep(100);
などを考えていますが、この方法が正しいのかどうかわかりません。

それと、コマンドラインの標準出力の内容を取りたいのですが、
(unixでいう、ls | myapp みたいな事です)
WindowsAPIで、自分の立ち上げたプロセスに対してこれをやるにはどうすればいいのでしょうか?

943 :デフォルトの名無しさん:02/06/02 15:55
>>942
CreateProcessで得たハンドルに対してWait〜Object(s)
コンソール取り込みはパイプでどうぞ

944 :デフォルトの名無しさん:02/06/02 16:00
別に924でも間違いでないけど、制御が返るのにタイムラグとループ処理があるので
WaitForSingleObject( プロセスのハンドル, INFINITE );
を使うと思う。

945 :デフォルトの名無しさん:02/06/02 16:21
>>943>>944
なるほど、ああいう関数はプロセスハンドルに対しても使えるのですね。
勉強になりました。

>>943
パイプは、自分で立ち上げたプロセスで取り込むことが出来ませんよね?
例えば vc が cl.exe の内容をメッセージに表示するのは、
パイプではないと思うのですが……

946 :デフォルトの名無しさん:02/06/02 16:23
>>945
名前なしパイプで検索かけろ

947 :デフォルトの名無しさん:02/06/02 16:29
>>946 thanks in advance

948 :デフォルトの名無しさん:02/06/03 19:38
バイトオーダを変換するAPIおしえてつかーさい

949 :デフォルトの名無しさん:02/06/03 19:41
htons/htonl/ntohs/ntohl

950 :デフォルトの名無しさん:02/06/03 19:44
Wait INFINITEはヨクナイトオモウ

951 :デフォルトの名無しさん:02/06/03 19:49
>>949
即レス感謝!

952 :デフォルトの名無しさん:02/06/03 20:51
GUIスレッドでやるのはよくないが、それ以外で
よくないと言う理由がこれといってみつからん

953 :デフォルトの名無しさん:02/06/03 22:46
DDK環境を使ってデバイスドライバの開発をしようと考えています。
で、そのドライバの内部からRPCを使いたいのですが
どういったAPIを使えばよいのでしょうか?
ソケットを扱うAPIは発見したんですが、
RPCを扱うためのものは見つかりませんでした。うーむ(´〜`)


954 :デフォルトの名無しさん:02/06/04 00:43
GetDriveType ってリムーバブルかどうかは分かりますが、FDDかどうかを知るには
どうしたら良いですか?

955 :デフォルトの名無しさん:02/06/04 00:50
総容量調べれば?

956 :954:02/06/04 01:01
>955 やられた!

957 :954:02/06/04 01:52
でも、ディスクが入っていないと判別できないという罠...
Googleったら、SHGetFileInfo の SHGFI_DISPLAYNAME で名前から判断する
というのもありましたね。

958 :デフォルトの名無しさん:02/06/04 09:55
>>954
ファイルシステムにアクセスを試みて、
戻り値(ガゴガゴという音)音を聞き分けて判断する

959 :デフォルトの名無しさん:02/06/04 17:33
OSのバージョンを取得するAPI教えてください。

960 :デフォルトの名無しさん:02/06/04 18:38
GetVersionEx

961 :デフォルトの名無しさん:02/06/05 00:55
メールサーバからメールのタイトルや送信者を調べて、
条件によって削除したいのですが、何を使うのがいいのでしょうか?
WinInetでは出来なさそうだし、
Telnetじゃカッコ悪いし。
何かいいのありませんか?


962 :デフォルトの名無しさん:02/06/05 00:56
>>961
スレ違い

963 :デフォルトの名無しさん:02/06/05 00:59
>>962
適当なスレがないのでここで勘弁願います。

Winsockで出来るのかな? でも面倒そう。

964 :デフォルトの名無しさん:02/06/05 01:05
ネットワークプログラミングスレは適当じゃないんか

965 :デフォルトの名無しさん:02/06/05 01:07
あーーーー。
ありました。
net や winsockで探したので引っ掛かりませんでした。

966 :超初心者:02/06/05 17:58
チュートリアルのScribbleやってみてるヘタレです。
どうにも納得できないので、親切な人 教えてください。

MSDNライブラリーの次の個所です。
Visual C++ ユーザーズガイド
 Visual C++ チュートリアル
  Scribble: MDI描画アプリケーション
   印刷機能の強化
    Scribbleイメージの拡大
     Y軸の反転への対応

ビューにCScrollViewをつかっていて、マッピングモードをMM_TEXTからMM_LOENGLISHに
変更するとY座標が反転します。

これに対応するために、BoundingBoxを計算する時に
m_rectBounding.top = min(m_rectBounding.top, pt.y); ->max(...)
m_rectBounding.bottom = max(m_rectBounding.bottom, pt.y); ->min(...)
というのは判るんですが、

BoundingBoxを線の幅だけ膨らませる処理を
m_rectBounding.InflateRect(CSize(m_nPenWidth,m_PenWidth) ->InfrateRect(...,-(int)m_nPenWidth));
というのは正しいのでしょうか?

::InfrateRectの説明を読む限り負の数を指定した場合にはDeflateになってしまうと思うのですが…


967 :デフォルトの名無しさん:02/06/05 18:39
MFCスレで聞け。
http://pc.2ch.net/test/read.cgi/tech/1021620974/l50

968 :デフォルトの名無しさん:02/06/05 20:46
>>966
確認してないが
InfrateRectは
left -= dx, top -= dy, right += dx, bottom += dy;
じゃ無かろうか、
Rectのtopとbottomが逆転しているなら、拡大するためにはdyが負でなければいけない

969 :超初心者:02/06/05 21:46
>968
なるほど、負の座標内での領域を拡大するには、負の値を渡すという事ですか。

>967
>MFCスレで聞け。
それも思ったんですが、CSizeはともかく本質的にInfrateRectの使い方なのでWin32の範囲かと

970 :967:02/06/05 23:00
>>969
InflateRect()ってWin32APIにあるんだな。こんな関数使ったことも
なかったからMFCの機能かと思ってた。スマソ
で、ついでにAPIリファレンスで長方形の概要見てみたら

>長方形の座標の値は、 符号付き整数で表現します。
>長方形の右辺の座標値は、 左辺の座標値よりも大きくなければなりません。
>同様に、 下辺の座標値は上辺の座標値よりも大きくなければなりません。

とあるから、InflateRect()の説明がそうなっていてもおかしくはないと思う。

971 :デフォルトの名無しさん:02/06/06 16:43
Win95でIPアドレスを変更するAPI教えてください。

972 :デフォルトの名無しさん:02/06/06 16:50
>>971
ZeroMemory

973 :デフォルトの名無しさん:02/06/06 17:11
レジストリ(HKCR) に書き込み権があるかどうか調べるために
  HKEY hKey;
  BOOL readOnly =
   RegOpenKeyEx( HKEY_CLASSES_ROOT, NULL, 0, KEY_WRITE, &hKey ) != ERROR_SUCCESS;

とやったんですが、書き込み件がないユーザでも readOnlyが TRUE になりません。
実際にレジストリに書き込むことなく、アクセス権を調べるのってできないんでしょうか?

974 :デフォルトの名無しさん:02/06/06 17:40
>973
RegOpenKeyExの説明には、サブキーにNULLを指定すると、キーの新しいハンドルが開かれるとある。
この場合、HKEY_CLASSES_ROOTという仮想キーがそのまま返るんじゃないの? アクセスチェック無しに。
サブキーに"*"とか指定してみたら?


975 :初心者:02/06/06 17:54
bmpとかでない16bits/pixelのロウイメージデータがあります。
表示するのに、次の手順で行ったところ、
1. CreateCompatibleBitmap()
2. BITMAPINFO型データの設定
3. SetBitmapBits()
4. CreateCompatibleDC()
5. SelectObject()
6. StretchBlt()
ディスプレイが16bitカラーモードの時には表示できましたが、32bitカラーだと化けます。
CreateCompatibleBitmapでスクリーン互換でつくってるんだから当然だなー、と思って
調べた挙げ句、
3. SetDIBits()
としたところ、16bit/32bit両方OKになりました。
が! 8bit(256色)だとヤッパリ化けます。
SetBitmapBitsの時とは異なり、イメージのサイズなどは正しく扱われてますが、
色がおかしい。適切に8bitのパレットのデータに変換されていないようです。

こんな時、どうしたらいいのでしょう? 親切な人おながいします。<(_ _)>


976 :973:02/06/06 18:02
>>974
RegOpenKeyEx( HKEY_CLASSES_ROOT, "*", 〜
で試してみたんですが、同じ結果でした。

RegCreateKeyEx( HKEY_CLASSES_ROOT, "*", 〜
とやったら、うまくいったので、これで良しとすることにしますた。

977 :デフォルトの名無しさん:02/06/06 18:04
16/24bitビットマップを8bitディスプレイに表示するなら
ビットマップを236色まで減色するか
DCにハーフトーンパレット選択したら何とかなると思うが。

978 :デフォルトの名無しさん:02/06/06 18:20
今時のご時世なら8ビットディスプレイモードなんか切り捨てて
しまった方が色々と幸せだぞ。パレットの扱いなんて面倒だし。

979 :デフォルトの名無しさん:02/06/06 18:42
>>971
DHCP立てれ

980 :デフォルトの名無しさん:02/06/06 18:47
果たして、そういう問題なんだろうか。

981 :デフォルトの名無しさん:02/06/06 19:51
いっこうに新スレ作る動きがないのは何かの陰謀ですか

982 :デフォルトの名無しさん:02/06/06 19:57
>>981
ペンギンの陰謀です。

983 :デフォルトの名無しさん:02/06/06 20:02
>977
ハーフトンパレット選択というのは、SetStretchBltMode(hDC, HALFTONE)の事でしょうか?
やってみましたが、全然変わりませんでした。

>ビットマップを236色まで減色するか
そこまでしない方法を探しているのですが、やっぱりそれしかありませんか。

ペイントブラシでも同じように色が変わるので、よしとするか...

984 :デフォルトの名無しさん:02/06/06 20:07
>>983
CreateHalftonePalette()っつーのがあるが調べてみたか?
即レスで適当に書いてるから間違ってても関知しない。

ついでに新スレ
http://pc.2ch.net/test/read.cgi/tech/1023361418/l50

985 :デフォルトの名無しさん:02/06/06 20:14
ハーフトーンパレットより、自前で236色まで減色したほうが多少きれいにみえる。

パレットは↓(記憶に基づいてカキコしてるから間違ってかもしれん。サンプル
コード検索してちょ)
xxx::OnDraw(CDC* pDC){
CPalette pal;
pal.CreateHalftonePalette( pDC );
pDC->SelectPalette( & pal, TRUE );//background?
...
pDC->RealizePalette();
StretchDIBits();

986 :983:02/06/06 21:38
ありがとうございました。
調べてみますです。

987 :デフォルトの名無しさん:02/06/07 00:42
>>976
HKEY_LOCAL_MACHINE\* がすでに存在するときERROR_ALREADY_EXISTS
が帰ってくる罠
つーか普通すでに存在するはずだが…
なにか根本的に間違えてないか?

988 :976:02/06/07 02:28
>>987
・HKLMじゃなくて HKCR
・RegCreateKeyEx はキーがすでに存在するときは、ERROR_ALREADY_EXISTSではなく、
 キーが開かれてて ERROR_SUCCESS が返ってくる。
 |既存のキーであることは、lpdwDisposition に REG_OPENED_EXISTING_KEY が格納
 |されることで知ることが出来る。
・HKCR\* は(多分)必ず存在するので、書き込みモードで Create(実際は Openになる)
 し、ERROR_SUCCESSならば書き込み権があると判断する。失敗なら書き込み権なし。

Administratorだと成功して、Guestだと失敗になったのでOKとした、ということです。

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

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

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)