[BLOGGER] Templateify javascript decoding instructions

Templateify được cộng động blogspot biết đến là một trong những trang web bán và chia sẻ template miễn phí. Các giao diện được templateify làm rất đẹp và tối ưu hóa vị trí đặt quảng cáo, bố cục rõ ràng, dễ dàng chỉnh sửa.


Tuy nhiên, các template miễn phí họ share thì đều mã hóa code và gắn bản quyền chân trang. Đối với chúng ta thì "free is the best". Vì vậy nên bài viết này, mình sẽ hướng dẫn cách giải mã javascript của Templateify trong vòng vài nốt nhạc.

Thật ra giải mã của templateify rất dễ, nó cũng gần giống các loại mã hóa thông thường, chỉ là một vài mẹo nhỏ đã có thể giải mã được.

Các bước thực hiện

Bước 1: Đầu tiên các bạn copy đoạn code cần giải mã và dán vào tool giải mã của de4js, chọn loại Eval.

Bước 2: Copy toàn bộ đoạn code vừa được giải mã vào notepad

Bước 3: Ở dòng đầu tiên chúng ta thấy có chữ var _$_obify2 thay nó thành var _$_obify1
Tiếp theo đó ở dòng số 10, xóa toàn bộ bắt đầu từ var _$_obify1 đến trước ! function tức là xóa dòng 10 đến dòng 15.

Khi đó chúng ta sẽ được như hình dưới đây:

Bước 4: Sử dụng công cụ Replace bằng cách nhấn Ctrl+H trong Notepad.

Thay thế toàn bộ _$_obify1 thành abcd hoặc bất cứ chuỗi kí tự nào cũng được. Ví dụ giaodienblog.

Bước 5: Copy toàn bộ đoạn code ở Notepad sau khi hoàn thành bước 4. dán vào tool giải mã của de4js, chọn loại Array.

Đến bước này thì chúng ta đã hoàn thành việc giải mã js của templateify. Nếu bạn muốn đoạn code trở nên đẹp hơn, chúng ta tiếp tục bước 6.

Bước 6: Copy toàn bộ đoạn code ở bước 5 vào Notepad
Ctrl+F tìm đến function getAjax

Khi đó ta sẽ có 1 đoạn kiểu dạng: function getAjax(_0x8008x17, _0x8008x19, _0x8008x30,_0x8008x31, _0x8008x1d) {

Sử dụng công cụ Replace bằng cách nhấn Ctrl+H trong Notepad thay thế _0x8008x17 thành $this, _0x8008x19 thành type, _0x8008x30 thành num...

Sau khi hoàn thành sẽ có 1 đoạn function getAjax($this, type, num, label, color) {
Đối với các loại biến xấu khác các bạn có thể thay thành $a, $b, $c ...

Tổng kết

Trên đây mình đã hướng dẫn cho các bạn chi tiết cách giải mã javascript của Templateify. Đối với các bạn có trình độ cao hơn có thể biến bản miễn phí của templateify thành bản premium với cách viewsource demo của templateify. Tuy nhiên các bạn không nên lạm dụng giải mã xong đi share template ... vì điều đó mình không khuyến khích, và templateify biết được cũng sẽ không share các bản miễn phí dùng thử nữa.

Chúc các bạn thành công!

on Thứ Năm, 14 tháng 12, 2023 | , | A comment?

[C#] Auto fill data from clipboard to list TextBox

Xin chào các bạn, bài viết hôm nay mình tiếp tục hướng dẫn các bạn cách auto fill dữ liệu từ clipboard windows vào danh sách Textbox trên C#, winform.


[C#] Viết ứng dụng Auto Fill list Textbox from clipboard Winform


Dưới đây, là hình ảnh demo ứng dụng:

Như hình trên, các bạn thấy ở trường dữ liệu nhập số căn cước công dân (CCCD).

Nó bao gồm 12 control Textbox như hình trên.

Khi chúng ta copy một dãy dữ liệu và kiểm tra nó đúng 12 số và không tồn tại ký tự đúng format của số căn cước công dân, thì chúng ta sẽ điền chúng vào tất cả Textbox trên.

Video demo ứng dụng:


Full source code C#:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;



namespace FillFormClipboard
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            foreach (Control control in panel1.Controls)
            {
                if (control is TextBox)
                {                   
                    TextBox textBox = (TextBox)control;
                    textBox.KeyDown += TextBox_KeyDown;
                    textBox.KeyPress += TextBox_KeyPress;
                }
            }
        }

        private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            // chỉ cho phép nhập số
            if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
            {                
                e.Handled = true;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void TextBox_KeyDown(object sender, KeyEventArgs e)
        {
           
            if (e.Control && e.KeyCode == Keys.V)
            {               
                HandlePasteEvent((TextBox)sender);
            }
        }

        private void HandlePasteEvent(TextBox textBox)
        {
           
            if (Clipboard.ContainsText())
            {
                string clipboardText = Clipboard.GetText().Trim().Replace(" ","");
                var regex = new Regex(@"^\d{12}$");
                if (clipboardText.Length == 12 && regex.IsMatch(clipboardText))
                {
                    char[] characters = clipboardText.ToCharArray();

                    foreach (Control control in panel1.Controls)
                    {
                        if (control is TextBox)
                        {
                            var nameControl = control.Name;
                            var i = Convert.ToInt16(nameControl.Split('_').LastOrDefault()) - 1;
                            control.Text = characters[i].ToString();
                        }
                    }
                }
            }
        }

    }
}

Chúc các bạn thành công với thủ thuật trên nhé.

DOWNLOAD SOURCE CODE

PASSWORD UNZIP: HUNG.PRO.VN 

on Thứ Ba, 5 tháng 12, 2023 | , , | A comment?

[C# - VB.NET] Hướng dẫn tạo hiệu ứng Fade Winform khi đóng form

Bài viết hôm nay, mình sẽ hướng dẫn các bạn cách tạo hiệu ứng Fade C#, khi đóng form thì form sẽ bắt đầu mờ từ từ mất đi.


Trong winform, có thuộc tính opacity là thuộc tính chỉnh độ trong suốt của winform.

Vậy chúng ta chỉ cần một vòng lặp cho opacity của form giảm dần từ 1 => 0 thì sẽ tạo ra hiệu ứng fade.

1. Đầu tiên chúng ta cần import thư viện

C#
using System.Threading;

VB.NET
Imports System.Threading

2. Viết sự kiện cho button Close tạo hiệu ứng fade khi đóng form

C#.
private void btnFade_Click(object sender, EventArgs e)
{
     int loopctr = 0;
 
     for (loopctr = 100; loopctr >= 5; loopctr -= 10)
     {
          this.Opacity = loopctr/95.0;
          this.Refresh();
          Thread.Sleep(100);
      }
 
      this.Close();
}

VB.NET
Private Sub btnFade_Click(ByVal sender As Object, ByVal e As EventArgs)
                  Dim loopctr As Integer = 0
 
                  For loopctr = 100 To 5 Step -10
                        Me.Opacity = loopctr/95.0
                        Me.Refresh()
                        Thread.Sleep(100)
                  Next loopctr
 
                  Me.Close()
End Sub

Chúc mọi người thành công với thủ thuật tuyệt vời này nhé.

on Chủ Nhật, 3 tháng 12, 2023 | , , | A comment?

[TIPS] Tải hình SVG trên FlatIcon miễn phí

Xin chào các bạn, bài viết hôm nay mình sẻ hướng dẫn các bạn cách tải hình SVG miễn phí trên FlatIcon, 


mặc định chỉ cho tải hình PNG 512, còn muốn tải hình định dạng SVG phải có tài khoản Premium mới download được.

[TIPS] Hướng dẫn cách tải hình SVG trên FlatIcon miễn phí


Trong lập trình ứng dụng, việc tìm kiếm icon cho phù hợp với các chức năng của ứng dụng rất phức tạp, vì mình không có người thiết kế.

Bạn có thể lên trang FlatIcon tìm kiếm icon và hình ảnh để sử dụng.

Hình Svg giúp chúng ta có thể thay đổi màu icon một cách linh hoạt và sắc nét.

Từ menu thanh BookMark Toolbar, các bạn add new như hình Gif ở trên:

Ở cột Name, thì bạn nhập gì tùy ý. Ví dụ: Download SVG
Còn ở mục URL, các bạn Paste đoạn code bên dưới này vào.
javascript: (function() {
    var url = window.location.href.split("?")[0];
    var filename = url.split("/")[url.split("/").length - 1];
    var id = filename.split("_")[1];
    if (!id) {
        alert("You can only download svg icon while viewing an icon.");
        return;
    }
    var onlyName = filename.split("_")[0];

    function downloadURI(uri, name) {
        var link = document.createElement("a");
        link.setAttribute("download", name);
        link.href = uri;
        document.body.appendChild(link);
        link.click();
        link.remove();
    }
    var loggedin = document.getElementById("gr_connected");
    if (!loggedin) {
        alert("Please login before clicking on me.");
        return;
    }
    fetch("https://www.flaticon.com/editor/icon/svg/" + id + "?type=standard").then(function(response) {
        return response.json();
    }).then((data) => {
        downloadURI(data.url, onlyName + ".svg");
    }).catch((error) => {
        alert("Something went wrong >.<");
    })
})()


Chúc các bạn thành công với thủ thuật trên.

on Thứ Bảy, 2 tháng 12, 2023 | , | A comment?

[VB.NET] Resolve captcha use AZCaptcha API services

Xin chào các bạn, bài viết hôm nay mình tiếp tục hướng dẫn các bạn cách giải image captcha sử dụng dịch vụ AZCapcha trên lập trình VB.NET winform.


Bài viết chỉ nhằm mục đích học tập, cách gọi API, không sử dụng cho mục đích xấu truy cập website trái phép.

[VB.NET] Hướng dẫn giải captcha sử dụng dịch vụ AZCaptcha API trên winform


AZCaptcha là dịch vụ api giải captcha: Image Captcha (normal captcha), Hcaptcha, recaptcha v1, v2 of Google...

Dưới đây, là hình ảnh demo ứng dụng:

Đầu tiên, các bạn cần đăng ký 1 tài khoản API tại đường dẫn: https://azcaptcha.com/

Với tài khoản đăng ký bạn sẽ được request miễn phí 50 lần.

Còn phí thì chỉ có 0/4$ / 1000 captcha, và mua tối thiểu phải 10$ qua cổng thanh toán: paypal, visa...

Đầu tiên, mình đã tạo sẵn 1 class AZCaptchaHelper.vb, để gọi Api này.

Video hướng dẫn Step by step:

Source code AZCaptchaHelper.vb
Imports System.IO
Imports System.Net
Imports System.Text

Public Class AZCaptchaHelper

    Public Shared Function GetHTMLForm(ByVal Url As String) As String
        Dim myRequest As HttpWebRequest = CType(WebRequest.Create(Url), HttpWebRequest)
        myRequest.Method = "GET"
        Dim myResponse As WebResponse = myRequest.GetResponse()
        Dim sr As StreamReader = New StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8)
        Dim result As String = sr.ReadToEnd()
        sr.Close()
        myResponse.Close()
        Return result
    End Function
    Public Shared Function ImageToBase64(img As Image) As String
        Return Convert.ToBase64String(ImageToByteArray(img))
    End Function
    Public Shared Function ImageToByteArray(img As Image) As Byte()
        Using strm As New MemoryStream
            img.Save(strm, img.RawFormat)
            Return strm.GetBuffer()
        End Using
    End Function
    Public Shared Function GetStringFromCaptcha(base64string As String, API_KEY As String) As String
        Try
            System.Net.ServicePointManager.Expect100Continue = False
            Dim request = CType(WebRequest.Create("http://azcaptcha.com/in.php"), HttpWebRequest)

            Dim postData = "method=base64&key=" & API_KEY & "&body=" + WebUtility.UrlEncode(base64string)
            Dim data = Encoding.ASCII.GetBytes(postData)
            request.Method = "POST"
            request.ContentType = "application/x-www-form-urlencoded"
            request.ContentLength = data.Length

            Using stream = request.GetRequestStream()
                stream.Write(data, 0, data.Length)
            End Using

            Dim response = CType(request.GetResponse(), HttpWebResponse)
            Dim responseString As String = New StreamReader(response.GetResponseStream()).ReadToEnd()

            If responseString.Contains("OK|") Then
                Dim captcha As String = ""

                While True
                    captcha = GetHTMLForm("http://azcaptcha.com/res.php?key=" & API_KEY & "&action=get&id=" & responseString.Split("|"c)(1))

                    If captcha = "CAPCHA_NOT_READY" Then
                        System.Threading.Thread.Sleep(500)
                        Continue While
                    End If

                    If captcha = "_" Then
                        System.Threading.Thread.Sleep(500)
                        Continue While
                    End If

                    If captcha.Contains("OK|") Then
                        captcha = captcha.Replace("OK|", "")
                    End If

                    Return captcha
                End While
            End If

            Return ""
        Catch e As Exception
            Dim tt As String = e.Message
            Return tt
        End Try
    End Function
End Class

Và cách gọi sử dụng ở form1.vb
Imports System.IO
Imports System.Net
Imports System.Text

Public Class AZCaptchaHelper

    Public Shared Function GetHTMLForm(ByVal Url As String) As String
        Dim myRequest As HttpWebRequest = CType(WebRequest.Create(Url), HttpWebRequest)
        myRequest.Method = &quot;GET&quot;
        Dim myResponse As WebResponse = myRequest.GetResponse()
        Dim sr As StreamReader = New StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8)
        Dim result As String = sr.ReadToEnd()
        sr.Close()
        myResponse.Close()
        Return result
    End Function
    Public Shared Function ImageToBase64(img As Image) As String
        Return Convert.ToBase64String(ImageToByteArray(img))
    End Function
    Public Shared Function ImageToByteArray(img As Image) As Byte()
        Using strm As New MemoryStream
            img.Save(strm, img.RawFormat)
            Return strm.GetBuffer()
        End Using
    End Function
    Public Shared Function GetStringFromCaptcha(base64string As String, API_KEY As String) As String
        Try
            System.Net.ServicePointManager.Expect100Continue = False
            Dim request = CType(WebRequest.Create(&quot;http://azcaptcha.com/in.php&quot;), HttpWebRequest)

            Dim postData = &quot;method=base64&amp;key=&quot; &amp; API_KEY &amp; &quot;&amp;body=&quot; + WebUtility.UrlEncode(base64string)
            Dim data = Encoding.ASCII.GetBytes(postData)
            request.Method = &quot;POST&quot;
            request.ContentType = &quot;application/x-www-form-urlencoded&quot;
            request.ContentLength = data.Length

            Using stream = request.GetRequestStream()
                stream.Write(data, 0, data.Length)
            End Using

            Dim response = CType(request.GetResponse(), HttpWebResponse)
            Dim responseString As String = New StreamReader(response.GetResponseStream()).ReadToEnd()

            If responseString.Contains(&quot;OK|&quot;) Then
                Dim captcha As String = &quot;&quot;

                While True
                    captcha = GetHTMLForm(&quot;http://azcaptcha.com/res.php?key=&quot; &amp; API_KEY &amp; &quot;&amp;action=get&amp;id=&quot; &amp; responseString.Split(&quot;|&quot;c)(1))

                    If captcha = &quot;CAPCHA_NOT_READY&quot; Then
                        System.Threading.Thread.Sleep(500)
                        Continue While
                    End If

                    If captcha = &quot;_&quot; Then
                        System.Threading.Thread.Sleep(500)
                        Continue While
                    End If

                    If captcha.Contains(&quot;OK|&quot;) Then
                        captcha = captcha.Replace(&quot;OK|&quot;, &quot;&quot;)
                    End If

                    Return captcha
                End While
            End If

            Return &quot;&quot;
        Catch e As Exception
            Dim tt As String = e.Message
            Return tt
        End Try
    End Function
End Class

DOWNLOAD SOURCE CODE

PASSWORD UNZIP: HUNG.PRO.VN

Chúc các ban thành công với thủ thuật trên.

on Thứ Sáu, 1 tháng 12, 2023 | , | A comment?

[C#] Source code Tool Ping Domain Website

Xin chào các bạn, hôm nay mình chia sẻ các bạn source code tool kiểm tra kết nối domain website trong lập trình c#, winform.

[C#] Chia sẻ source code tool kiểm tra domain website

Tool này được thiết kế để kiểm tra tình trạng kết nối và thời gian phản hồi của các domain thông qua giao thức ping.

Bằng cách này, người quản trị hệ thống có thể nhanh chóng đánh giá được trạng thái của các server và địa chỉ web có liên quan có đang online hay bị rớt mạng.

Hoặc xem kết nối có ổn định hay không.

Video demo ứng dụng:

Source code C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Net.NetworkInformation;
using System.Threading;
using DevExpress.XtraGrid.Views.Grid;
using PingAlarm.Properties;
using System.Net;
using System.Net.Sockets;
using System.IO;
using DevExpress.XtraBars.Ribbon;
using DevExpress.XtraBars.Helpers;
using ZaloCSharpSDK;
using Newtonsoft.Json.Linq;
using System.Diagnostics;
using DevExpress.XtraEditors.Controls;
using DevExpress.Utils;
using System.Reflection;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;

namespace PingAlarm
{
    public partial class PingAlarm : DevExpress.XtraEditors.XtraForm
    {
        public CancellationTokenSource tokenSource;
        public bool flag_start = false;
        public Dictionary<int, int> list_timeout;
        public Dictionary<int, bool> list_status;     
        public string auth_code_zalo;
        public long id_user_zalo = 0L;
        public string access_token;
        public string user_fb;
        public string password_fb;
        public string url_fb;
       
        public PingAlarm()
        {
            InitializeComponent();
            string theme = Properties.Settings.Default.theme;
            defaultLookAndFeel.LookAndFeel.SetSkinStyle(theme);
            gridView_Data.CustomDrawRowIndicator += gridview_Email_CustomDrawRowIndicator;
            SkinHelper.InitSkinGalleryDropDown(galleryDropDown1);
            galleryDropDown1.Gallery.ItemClick += new GalleryItemClickEventHandler(Gallery_ItemClick);
     
        }
        private void Gallery_ItemClick(object sender, GalleryItemClickEventArgs e)
        {
            Properties.Settings.Default.theme = e.Item.Value.ToString();
            Properties.Settings.Default.Save();
        }


        private void btn_start_Click(object sender, EventArgs e)
        {
            flag_start = !flag_start;

            if (flag_start)
            {
                DataTable theListOfIPs = gridControl_Data.DataSource as DataTable;
                if (theListOfIPs.Rows.Count < 1)
                {
                    XtraMessageBox.Show("Bạn vui lòng thêm tên domain hoặc IP vào danh sách trước khi bắt đầu ping.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                //set config facebook
                var provider = new DataProvider();
                user_fb = provider.ExecuteScalar($"SELECT value FROM tbl_config WHERE name='fb_username'").ToString();
                password_fb = provider.ExecuteScalar($"SELECT value FROM tbl_config WHERE name='fb_password'").ToString();
                url_fb = provider.ExecuteScalar($"SELECT value FROM tbl_config WHERE name='user_receive'").ToString();


                int sleep = Convert.ToInt32(txt_sleep.Text);
                txt_sleep.Enabled = false;
           
                btn_start.Text = "Dừng ping";
                btn_start.ImageOptions.Image = Resources.Error_32x32;
                list_timeout = new Dictionary<int, int>();
                list_status = new Dictionary<int, bool>();
                foreach (DataRow item in theListOfIPs.Rows)
                {
                    int rowHandle = theListOfIPs.Rows.IndexOf(item);
                    list_status.Add(rowHandle, true);
                }

                timer.Enabled = true;
                tokenSource = new CancellationTokenSource();
                CancellationToken ct = tokenSource.Token;

                Task.Factory.StartNew(new Action(() =>
                {
                    while (flag_start)
                    {
                        if (ct.IsCancellationRequested)
                        {
                            ct.ThrowIfCancellationRequested();
                            return;
                        }


                        Parallel.ForEach(theListOfIPs.AsEnumerable(), item =>
                        {
                            int rowHandle = theListOfIPs.Rows.IndexOf(item);
                            Ping ping = new Ping();
                            string item_hostname = item["hostname"].ToString();
                            try
                            {
                                var pingReply = ping.Send(item_hostname, 1000);
                                SetTextPingComplete(rowHandle, pingReply);

                            }
                            catch (Exception)
                            {
                                SetTextPingComplete(rowHandle, null);
                            }

                        });


                        Thread.Sleep(1000);

                    }
                }), ct);
            }
            else
            {
                timer.Enabled = false;
               
                btn_start.Text = "Bắt đầu ping";
                txt_sleep.Enabled = true;
                btn_start.ImageOptions.Image = Resources.Play_32x32;
                tokenSource.Cancel();
            }
        }

        private void SetTextPingComplete(int rowHandle, PingReply pingReply)
        {
            gridControl_Data.BeginInvoke((Action)(() =>
            {
                bool status = list_status[rowHandle];
                if (pingReply == null)
                {
                    gridView_Data.SetRowCellValue(rowHandle, "status", "Timeout");
                    gridView_Data.SetRowCellValue(rowHandle, "ip", "0.0.0.0");
                    gridView_Data.SetRowCellValue(rowHandle, "byte", "0");
                    gridView_Data.SetRowCellValue(rowHandle, "time", "0ms");
                    gridView_Data.SetRowCellValue(rowHandle, "ttl", "0");
                    if (!list_timeout.Keys.Contains(rowHandle))
                    {
                        if (status)
                        {
                            list_timeout.Add(rowHandle, Convert.ToInt32(txt_sleep.Text));
                            list_status[rowHandle] = false;
                        }

                    }
                }
                else
                {
                    if (pingReply.Status.ToString().Equals("Success"))
                    {
                        gridView_Data.SetRowCellValue(rowHandle, "ip", pingReply.Address.ToString());
                        gridView_Data.SetRowCellValue(rowHandle, "byte", pingReply.Buffer.Count().ToString());
                        gridView_Data.SetRowCellValue(rowHandle, "time", pingReply.RoundtripTime.ToString() + "ms");
                        gridView_Data.SetRowCellValue(rowHandle, "ttl", pingReply.Options.Ttl.ToString());
                        gridView_Data.SetRowCellValue(rowHandle, "status", pingReply.Status.ToString());
                        if (status == false)
                        {

                            gridView_Data.SetRowCellValue(rowHandle, "timeout", "");

                            list_timeout.Remove(rowHandle);
                            list_status[rowHandle] = true;


                        }
                    }
                    else
                    {
                        gridView_Data.SetRowCellValue(rowHandle, "ip", "0.0.0.0");
                        gridView_Data.SetRowCellValue(rowHandle, "byte", "0");
                        gridView_Data.SetRowCellValue(rowHandle, "time", "0ms");
                        gridView_Data.SetRowCellValue(rowHandle, "ttl", "0");
                        gridView_Data.SetRowCellValue(rowHandle, "status", pingReply.Status.ToString());
                        if (!list_timeout.Keys.Contains(rowHandle) && status)
                        {
                            list_timeout.Add(rowHandle, Convert.ToInt32(txt_sleep.Text));
                            list_status[rowHandle] = false;
                        }

                    }
                }
                gridView_Data.SetRowCellValue(rowHandle, "created_date", DateTime.Now.ToString("HH:mm:ss"));

            }));
        }

        public void LoadData()
        {
            var dataProvider = new DataProvider();
            var table = dataProvider.ExecuteQuery("SELECT hostname, ip, byte, time, ttl, ifnull(status, '') as status, created_date, timeout FROM tbl_data");
            gridControl_Data.DataSource = table;
        }

        public string GetLocalIPAddress()
        {
            var host = Dns.GetHostEntry(Dns.GetHostName());
            foreach (var ip in host.AddressList)
            {
                if (ip.AddressFamily == AddressFamily.InterNetwork)
                {
                    return ip.ToString();
                }
            }
            throw new Exception("No network adapters with an IPv4 address in the system!");
        }


        private void PingAlarm_Load(object sender, EventArgs e)
        {
            var provider = new DataProvider();
            LoadData();
            txt_tenmay.Caption = "TÊN MÁY: " + SystemInformation.ComputerName;
            txt_myip.Caption = "IP LAN: " + GetLocalIPAddress();
            txt_public_ip.Caption = "IP WAN: " + new WebClient().DownloadString("http://icanhazip.com");
            //load time send
            int timesend = Convert.ToInt32(provider.ExecuteScalar($"SELECT value FROM tbl_config WHERE name='time_send'").ToString());                   
            txt_sleep.Text = timesend.ToString();
          //  LoadDanhBaZalo();
            //load config facebook
       
        }

        private void gridView_Data_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
        {
            GridView view = sender as GridView;
            if (e.RowHandle == view.FocusedRowHandle)
            {
                e.Appearance.BackColor = Color.DarkBlue;
                e.Appearance.ForeColor = Color.White;
            }
        }

        public void gridview_Email_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {
            if (!gridView_Data.IsGroupRow(e.RowHandle)) //Nếu không phải là Group
            {
                if (e.Info.IsRowIndicator) //Nếu là dòng Indicator
                {
                    if (e.RowHandle < 0)
                    {
                        e.Info.ImageIndex = 0;
                        e.Info.DisplayText = string.Empty;
                    }
                    else
                    {
                        e.Info.ImageIndex = -1; //Không hiển thị hình
                        e.Info.DisplayText = (e.RowHandle + 1).ToString(); //Số thứ tự tăng dần
                    }
                    SizeF _Size = e.Graphics.MeasureString(e.Info.DisplayText, e.Appearance.Font); //Lấy kích thước của vùng hiển thị Text
                    Int32 _Width = Convert.ToInt32(_Size.Width) + 20;
                    BeginInvoke(new MethodInvoker(delegate { cal(_Width, gridView_Data); })); //Tăng kích thước nếu Text vượt quá
                }
            }
            else
            {
                e.Info.ImageIndex = -1;
                e.Info.DisplayText = string.Format("[{0}]", (e.RowHandle * -1)); //Nhân -1 để đánh lại số thứ tự tăng dần
                SizeF _Size = e.Graphics.MeasureString(e.Info.DisplayText, e.Appearance.Font);
                Int32 _Width = Convert.ToInt32(_Size.Width) + 20;
                BeginInvoke(new MethodInvoker(delegate { cal(_Width, gridView_Data); }));
            }
        }

        public bool cal(Int32 _Width, GridView _View)
        {
            _View.IndicatorWidth = _View.IndicatorWidth < _Width ? _Width : _View.IndicatorWidth;
            return true;
        }

        private void gridView_Data_RowCellClick(object sender, RowCellClickEventArgs e)
        {
            if (e.Column == gridXoa)
            {
                if (flag_start)
                {
                    XtraMessageBox.Show("Vui lòng dừng Ping trước khi xóa tên miền ra khỏi danh sách.", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                string hostname = gridView_Data.GetFocusedDataRow()["hostname"].ToString();
                var diaglog = XtraMessageBox.Show($"Bạn có chắc chắn muốn xóa tên miền {hostname} ra khỏi danh sách hay không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (diaglog == DialogResult.Yes)
                {
                    var provider = new DataProvider();
                    provider.ExecuteNonQuery($"delete from tbl_data where hostname='{hostname}'");
                    ((DataTable)gridControl_Data.DataSource).Rows.Remove(gridView_Data.GetDataRow(e.RowHandle));
                }

            }
        }

        private void btn_save_data_Click(object sender, EventArgs e)
        {
            var name_domain = txt_name_domain.Text.Trim();
            if (string.IsNullOrEmpty(name_domain))
            {
                XtraMessageBox.Show("Bạn chưa nhập tên miền.", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (flag_start)
            {
                XtraMessageBox.Show("Vui lòng dừng Ping trước khi thêm tên miền mới vào danh sách.", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            // kiểm tra tên miền đã tồn tại trong hệ thống chưa
            var provider = new DataProvider();
            var count = Convert.ToInt32(provider.ExecuteScalar($"SELECT COUNT(*) FROM tbl_data WHERE hostname ='{txt_name_domain.Text.Trim()}'").ToString());
            if (count > 0)
            {
                XtraMessageBox.Show("Tên miền này đã tồn tại trong danh sách, vui lòng nhập tên miền khác.", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            provider.ExecuteNonQuery($"INSERT INTO tbl_data(hostname) VALUES('{name_domain}')");
            LoadData();
           

        }

        private void txt_sleep_KeyUp(object sender, KeyEventArgs e)
        {
            var provider = new DataProvider();
            provider.ExecuteNonQuery($"UPDATE tbl_config set value='{txt_sleep.Text.Trim()}' WHERE name='time_send'");
        }

        private void timer_Tick(object sender, EventArgs e)
        {
            if (list_timeout.Count > 0)
            {
                foreach (var item in list_timeout.ToList())
                {
                    gridControl_Data.BeginInvoke(new Action(() =>
                    {
                        gridView_Data.SetRowCellValue(item.Key, "timeout", item.Value);
                    }));

                    var value = item.Value;
                    if (value > 0)
                    {
                        value--;
                        if (list_timeout.Keys.Contains(item.Key))
                        {
                            list_timeout[item.Key] = value;
                        }

                    }
                    else
                    {
                        DataTable theListOfIPs = gridControl_Data.DataSource as DataTable;
                        DataRow dr_item = theListOfIPs.Rows[item.Key];

                        int time_begin = Convert.ToInt32(txt_sleep.Text);
                        string message = $"Cảnh báo Domain: {dr_item["hostname"]} đã rớt mạng vào lúc: {DateTime.Now.AddSeconds(-time_begin).ToString("dd/MM/yyyy HH:mm")}";

                       
                       
                        
                        list_timeout.Remove(item.Key);

                      

                       

                    }
                }
            }
        }
    

        private void PingAlarm_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                Process[] proc = Process.GetProcessesByName("chromedriver");
                foreach (Process chrome in proc)
                {
                    chrome.Kill();
                }

            }
            catch (Exception){}
        }

    

       
    }
}

Chúc các bạn thành công với thủ thuật trên.
PASSWORD UNZIP: HUNG.PRO.VN

on Thứ Năm, 30 tháng 11, 2023 | , | A comment?

[C#] Generate PDF file use QuestPDF Lib

Xin chào các bạn, bài viết hôm nay mình hướng dẫn các bạn cách tạo file trực tiếp PDF trên C#, winform sử dụng thư viện QuestPDF.


[C#] Hướng dẫn tạo file PDF sử dụng thư viện QuestPDF

Thư viện QuestPDF là thư viện mở dùng để tạo File PDF.

Nó có cung cấp phiên bản miễn phí vào có phí, nếu doanh nghiệp có doanh thu hàng năm dưới 1 triệu đô USD thì được sử dụng miễn phí nhé các bạn.

Dưới đây, là hình ảnh mình tạo file PDF từ thư viện:
[C#] Generate PDF file use QuestPDF Lib

Với thư viện này giúp chúng ta dễ dàng định dạng Text, tạo bảng Table chèn Image, liên kết Hyperlink...

Chi tiết, các bạn có thể tham khảo thêm ở Documnet của nó nhé.
Đầu tiên, các bạn có thể cài đặt thư viện từ Nuget:
NuGet\Install-Package QuestPDF -Version 2023.10.2

Full source code c#:

using EmployeeDataExample;
using QuestPDF.Elements;
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ZXing;

namespace QuestPDFTester
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            QuestPDF.Settings.License = LicenseType.Community;
        }

        private async void button1_Click(object sender, EventArgs e)
        {

            //var image = QRCodeGenerator.GenerateQRCodeBytes("https://laptrinhvb.net/bai-viet/chuyen-de-csharp/---Csharp----Huong-dan-tao-ung-dung-dock-windows-giong-Taskbar/2f0a9a79ff1bafd4.html", 80, 80);
            //var ddd = (Bitmap)((new ImageConverter()).ConvertFrom(image));
            //pictureBox1.Image = (ddd);


            var listEmployee = await new EmployeeData().GetEmployeesAsync();

            Document.Create(container =>
            {
                container.Page(page =>
                {
                    page.Size(PageSizes.A4);
                    page.Margin(4, Unit.Millimetre);
                    page.PageColor(Colors.White);
                    
                    page.DefaultTextStyle(x => x.FontSize(9));
                    page.DefaultTextStyle(x => x.FontFamily("Tahoma"));

                    //page.Header()
                    //    .Text("Hello PDF!")
                    //    .SemiBold().FontSize(36).FontColor(Colors.Blue.Medium);

                      page.Content()
                        .PaddingVertical(1, Unit.Centimetre)
                        .Column(x =>
                        {
                            x.Item().Row(
                                row =>
                                {


                                    row.RelativeItem().AlignLeft()

                                      .Row(rowitem =>
                                      {
                                          rowitem.AutoItem().Width(65).Height(65).Image(QRCodeGenerator.ReadImageFileToBytes("logo.png"));


                                          rowitem.AutoItem().Container().Width(4);
                                          rowitem.RelativeItem().Padding(2).Column(column =>
                                          {
                                              column.Item().Container().Height(2);
                                              column.Item().Row(row2 =>
                                              {
                                                  row2.Spacing(8);
                                                  row2.AutoItem().Text($"CÔNG TY PHÁT TRIỂN CÔNG NGHỆ TPHCM").FontSize(9).FontColor("#000");

                                              });
                                              column.Item().Row(row2 =>
                                              {
                                                  row2.Spacing(8);
                                                  row2.AutoItem().Text($"LẬP TRÌNH VB.NET").FontSize(9).FontColor("#000");

                                              });
                                             
                                              column.Item().Row(row2 =>
                                              {
                                                  row2.Spacing(8);
                                                  row2.RelativeItem().Hyperlink("https://laptrinhvb.net").Text("https://laptrinhvb.net").FontSize(9).FontColor("#0958d9");

                                              });

                                          });
                                      });



                                    row.RelativeItem().AlignRight().Width(250).Height(65)
                                           
                                        .Row(rowitem =>
                                        {
                                            rowitem.AutoItem().Width(65).Height(65).Image(QRCodeGenerator.GenerateQRCodeBytes("https://laptrinhvb.net/bai-viet/chuyen-de-csharp/---Csharp----Huong-dan-tao-ung-dung-dock-windows-giong-Taskbar/2f0a9a79ff1bafd4.html", 170, 170));


                                            rowitem.AutoItem().Container().Width(4);
                                            rowitem.RelativeItem().Border(0.5f).Padding(2).Column(column =>
                                             {
                                                 column.Item().Container().Height(2);
                                                column.Item().Row(row2 =>
                                                {                                                  
                                                    row2.Spacing(12);
                                                    row2.AutoItem().Text($"Mã tài liệu: LAPTRINHVB-03-BCT/02").FontSize(9).Italic();

                                                });
                                                 column.Item().Row(row2 =>
                                                 {
                                                     row2.Spacing(12);
                                                     row2.AutoItem().Text($"Ngày ban hành: 21/11/2023").FontSize(9).Italic();

                                                 });
                                                 column.Item().Row(row2 =>
                                                 {
                                                     row2.Spacing(12);
                                                     row2.AutoItem().Text($"Ngày sửa đổi: 22/03/2023").FontSize(9).Italic();
                                                     
                                                 });
                                                 column.Item().Row(row2 =>
                                                 {
                                                     row2.Spacing(5);
                                                     row2.AutoItem().Text($"Sửa đổi lần: 01").FontSize(9).Italic()  ; 
                                                    
                                                 });

                                             });
                                        });
                                     
                                }
                            );

                            // x.Item().LineHorizontal(1);
                            x.Spacing(10);
                            x.Item().AlignCenter().Text("DANH SÁCH NHÂN VIÊN")
                            
                            .SemiBold().FontSize(16).FontColor(Colors.Orange.Medium);
                            x.Spacing(10);



                           // x.Item().Text(Placeholders.LoremIpsum());
                           

                            x.Item().MinimalBox();
                          //  x.Item().Border(0.5F);
                            x.Item().Table(table =>
                               {
                                   QuestPDF.Infrastructure.IContainer DefaultCellStyle(QuestPDF.Infrastructure.IContainer containers, string backgroundColor)
                                   {
                                       return containers
                                           .Border(0.5f)
                                           .BorderColor(Colors.Grey.Lighten1)
                                           .Background(backgroundColor)
                                          
                                           .PaddingVertical(5)
                                           .PaddingHorizontal(10)
                                           .AlignCenter()
                                           .AlignMiddle();
                                   }

                                   QuestPDF.Infrastructure.IContainer DefaultCellStyle2(QuestPDF.Infrastructure.IContainer containers, string backgroundColor)
                                   {
                                       return containers
                                           .Border(0.5f)
                                           .BorderColor(Colors.Grey.Lighten1)
                                           .Background(Colors.White)

                                           .PaddingVertical(5)
                                           .PaddingHorizontal(10);
                                        
                                   }

                                   QuestPDF.Infrastructure.IContainer DefaultCellStyleGroup(QuestPDF.Infrastructure.IContainer containers, string backgroundColor)
                                   {
                                       return containers
                                           .Border(0.5f)
                                             .BorderColor(Colors.Grey.Lighten1)
                                           .Background("#f0f0f0")

                                           .PaddingVertical(5)
                                           .PaddingHorizontal(10);

                                   }

                                   table.ColumnsDefinition(columns =>
                                   {
                                       columns.ConstantColumn(40);
                                       columns.ConstantColumn(70);
                                       columns.ConstantColumn(120);
                                       columns.ConstantColumn(100);
                                       columns.RelativeColumn();


                                   });


                                   table.Header(header =>
                                   {

                                       header.Cell().Element(CellStyle).Text("#").FontSize(10).FontColor(Colors.White).Bold();
                                       header.Cell().Element(CellStyle).Text("Mã NV").FontSize(10).FontColor(Colors.White).Bold();
                                       header.Cell().Element(CellStyle).Text("Tên nhân viên").FontSize(10).FontColor(Colors.White).Bold();
                                       header.Cell().Element(CellStyle).Text("Nơi sinh").FontSize(10).FontColor(Colors.White).Bold();
                                       header.Cell().Element(CellStyle).Text("Địa chỉ").FontSize(10).FontColor(Colors.White).Bold();

                                       QuestPDF.Infrastructure.IContainer CellStyle(QuestPDF.Infrastructure.IContainer containers) => DefaultCellStyle(containers, Colors.Blue.Medium);

                                       
                                   });

                                   var list50Item = listEmployee.Where(u => u.BirthPlace !="Trung Quốc").ToList().Take(50);

                                   var groupedProducts = list50Item.GroupBy(p => p.BirthPlace);
                                   int i = 1;
                                   foreach (var group in groupedProducts)
                                   {
                                       table.Cell().ColumnSpan(5).Element(CellStyleGroup).Text(group.Key).FontSize(10).FontColor("#000000");

                                       
                                       foreach (var item in group)
                                       {
                                           table.Cell().Element(CellStyle2).AlignCenter().Text(i.ToString() + ".").FontSize(10);
                                           table.Cell().Element(CellStyle2).Text(item.Code).FontSize(10);
                                           table.Cell().Element(CellStyle2).Text(item.Name).FontSize(10);
                                           table.Cell().Element(CellStyle2).Text(item.BirthPlace).FontSize(10);
                                           table.Cell().Element(CellStyle2).Text(item.Address).FontSize(10);
                                           i++;
                                       }
                                   }

                                  
                                   QuestPDF.Infrastructure.IContainer CellStyle2(QuestPDF.Infrastructure.IContainer containers) => DefaultCellStyle2(containers, Colors.Blue.Medium);
                                   QuestPDF.Infrastructure.IContainer CellStyleGroup(QuestPDF.Infrastructure.IContainer containers) => DefaultCellStyleGroup(containers, Colors.Blue.Medium);

                                   table.ExtendLastCellsToTableBottom();
                                   
                                  
                               });
                        });


                  
                  


                    page.Footer()
                        .AlignCenter()
                        .Text(x =>
                        {
                            x.Span("Page ");
                            x.CurrentPageNumber();
                        });
                });
            })
                .GeneratePdf("test.pdf");


            Process.Start("test.pdf");
        }


    }

 
    public static class SimpleExtension
    {
        private static QuestPDF.Infrastructure.IContainer Cell(this QuestPDF.Infrastructure.IContainer container, bool dark)
        {
            return container
                .Border(1)
                .Background(dark ? Colors.Grey.Lighten2 : Colors.White)
                .Padding(10);
        }
        
        public static void LabelCell(this QuestPDF.Infrastructure.IContainer container, string text) => container.Cell(true).Text(text).Medium();      
        public static QuestPDF.Infrastructure.IContainer ValueCell(this QuestPDF.Infrastructure.IContainer container) => container.Cell(false);

        public static QuestPDF.Infrastructure.IContainer Block(this QuestPDF.Infrastructure.IContainer container)
        {
            return container
                .Border(1)
                .Background(Colors.Grey.Lighten3)
                .ShowOnce()
                .MinWidth(50)
                .MinHeight(50)
                .AlignCenter()
                .AlignMiddle();
        }

    }

    class QRCodeGenerator
    {
        public static byte[] GenerateQRCodeBytes(string text, int width = 100, int height = 100, int margin = 0)
        {          
            BarcodeWriter barcodeWriter = new BarcodeWriter();
            barcodeWriter.Format = BarcodeFormat.QR_CODE;          
            barcodeWriter.Options = new ZXing.Common.EncodingOptions
            {
                Width = width, 
                Height = height, 
                Margin = margin 
            };          
            Bitmap qrCodeBitmap = barcodeWriter.Write(text);         
            byte[] byteArray = BitmapToByteArray(qrCodeBitmap);
            return byteArray;
        }      
        private static byte[] BitmapToByteArray(Bitmap bitmap)
        {
            using (var stream = new System.IO.MemoryStream())
            {
                bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
                return stream.ToArray();
            }
        }

        public static byte[] ReadImageFileToBytes(string filePath)
        {
            try
            {              
                if (!File.Exists(filePath))
                {
                    throw new FileNotFoundException($"File not found: {filePath}");
                }              
                byte[] fileBytes = File.ReadAllBytes(filePath);
                return fileBytes;
            }
            catch (Exception ex)
            {               
                Console.WriteLine($"Error reading image file: {ex.Message}");
                return null; 
            }
        }
    }
}

VIDEO DEMO ỨNG DỤNG.


DOWNLOAD SOURCE CODE

PASSWORD UNZIP: HUNG.PRO.VN

on Thứ Sáu, 24 tháng 11, 2023 | , , | A comment?

[C#] How to make Appbar in windows

Xin chào, các bạn bài viết hôm nay mình hướng dẫn cách viết ứng dụng Dock giao diện trên Windows giống Taskbar C#.


[C#] Hướng dẫn tạo ứng dụng dock windows giống Taskbar


Hiện nay, trên windows 11, chúng ta có Copilot bản preview, khi các bạn chạy ứng dụng, thấy app nào luôn neo ở góc bên phải, và chiếm luôn không gian đó của màn hình.

Trên C#, các bạn thực hiện đơn giản theo các bước sau:

Đầu tiên, các bạn cài thư viện tip2tail.WinFormAppBarLib từ Nuget:
NuGet\Install-Package tip2tail.WinFormAppBarLib -Version 1.2.1

VIDEO HƯỚNG DẪN:

Full source code c#:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using tip2tail.WinFormAppBarLib;

namespace AppBarDesktop
{
    public partial class Form1 : Form
    {
        public Form1()
        {
          //  AppBarHelper.PreventShowDesktop(this.Handle);
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            AppBarHelper.AppBarMessage = "HUNG.PRO.VN";
            AppBarHelper.SetAppBar(this, AppBarEdge.None);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            AppBarHelper.SetAppBar(this, AppBarEdge.None);
        }

        private void button5_Click(object sender, EventArgs e)
        {
            AppBarHelper.SetAppBar(this, AppBarEdge.Left);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            AppBarHelper.SetAppBar(this, AppBarEdge.Right);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            AppBarHelper.SetAppBar(this, AppBarEdge.Bottom);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            AppBarHelper.SetAppBar(this, AppBarEdge.Top);
        }
    }
}

Chúc cấc bạn thành công với thủ thuật trên.
DOWNLOAD SOURCE CODE

on Thứ Tư, 22 tháng 11, 2023 | , , | A comment?

[PYTHON] Generate random passwords with Python code

Làm thế nào để bạn có thể tạo ra khởi tạo mật khẩu ngẫu nhiên gồm kí tự + số ngẫu nhiên giúp chúng ta có 1 mật khẩu mạnh mẽ bằng code python nào? Chúng ta đều biết một mật khẩu mạnh, là phải đạt tiêu chí tối thiểu gồm độ dài chuỗi thấp nhất là 8 và phải trộn lẫn giữa số, chữ thường và chữ hoa với nhau.

[PYTHON] Generate random passwords with Python code
 Vậy để làm được điều này, chúng ta có thể sử dụng ngay module ‘random‘ và ‘string‘ trợ giúp.
Ví dụ trong bài này sử dụng Python 2.7, Python 3.x syntax sẽ khác.

1. Sử dụng module string

– Import module string vào nào.
>>> import string

– Xuất ra đủ 1 dãy alphabet chữ thường và chữ hoa.
>>> string.letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

– Xuất ra các kí tự đặc biệt.
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

– Xuất ra số.
>>> string.digits
'0123456789'

– Khá là đầy đủ cho việc khởi tạo mật khẩu an toàn chưa nào. Mình thì hạn chế sử dụng thêm kí tự đặc biệt trong phần generate do sẽ có nhiều hệ thống không chấp nhận 1 vài kí tự đặc biệt.
– Nhưng mà in ra vậy rồi thì chúng ta phải làm gì để lựa chọn các kí tự hoặc số 1 cách ngẫu nhiên cơ chứ ? Chính vì điều đó mà chúng ta sẽ sử dụng module ‘random‘ của Python.

2. Sử dụng module random

– Module random có rất là nhiều phương thức method hỗ trợ như tạo số ngẫu nhiên,.. nhưng ta cần ở đây trong nội dung bài này chỉ là phương thức chọn ngẫu nhiên kí tự ta đã chuẩn bị sẵn.
>>> import string, random
>>> chars = string.letters
>>> random.choice(chars)
't'
>>> random.choice(chars)
'V'
>>> random.choice(chars)
'J'
>>> random.choice(chars)
'a'

– Tới đây bạn đã có thể hình dung ra code cơ bản để khởi tạo mật khẩu ngẫu nhiên chưa nào

3. Code khởi tạo mật khẩu ngẫu nhiên

– Mình sẽ fix độ dài của mật khẩu là nằm trong khoảng từ 8 đến 15 trong code mẫu đơn giản.
– Cho chạy ngẫu nhiên độ dài , vòng lặp for xuất các kí tự ngẫu nhiên trong biến ‘chars_fixed‘ và nối chúng lại với nhau.
import string
import random

chars_fixed = string.letters + string.digits
min_size_pass = 8
max_size_pass = 15

password = "".join(random.choice(chars_fixed) for x in range(random.randint(min_size_pass, max_size_pass)))
print "This is your password : %s" % password

Output:
This is your password : DZ2b6wjXj8mD
This is your password : 6wiu7pcgb

Cực kì đơn giản phải không nào, như vậy bạn đã có thể tự tạo cho bản thân một hàm python để khởi tạo mật khẩu ngẫu nhiên bằng code Python rồi. Chúc các bạn thành công.

on Thứ Sáu, 17 tháng 11, 2023 | | A comment?

[C#] Smooth Typing Effect in RichTextBox like MS Word 2013

Xin chào các bạn, bài viết hôm nay mình sẽ chia sẽ đến các bạn cách thực hiện hiệu ứng gõ phím Smooth Typing Effect trên RichTextBox like Microsoft Word 2013 trên C# winform.

 

[C#] Hiệu ứng gõ phím Smooth typing Effect RichTextBox giống MS Word 2013

Từ phiên bản office 2013, các bạn sẽ thấy Microsoft có tích hợp thêm hiệu ứng smooth typing khi chúng ta soạn thảo văn bản.

Khi gõ text, con nháy đơn sẽ di chuyển từ từ giống đồng hồ chạy tự động nhìn rất mượt.
Hình ảnh demo ứng dụng Smooth Typing Effect C#:

Bạn nhìn hình demo trên, các bạn dễ dàng thấy con nháy đơn soạn thảo nó di chuyển từ từ.
Để chỉnh tốc độ nhanh hay chậm các bạn thay đổi thông số ở Thread.Sleep này nhé.
Thread.Sleep(20); // set speed effect slow or fast

Full source code Smooth Typing Effect C#:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SmoothTypingText
{
    public partial class Form1 : Form
    {       
        [DllImport("user32.dll")] static extern bool SetCaretPos(int x, int y);
        [DllImport("user32.dll")] static extern Point GetCaretPos(out Point point);
        public int speed = 20;
        public Form1()
        {
            InitializeComponent();
            Point targetCaretPos;
            GetCaretPos(out targetCaretPos);            
            richTextBox1.TextChanged += (s, e) =>
            {               
                Point temp;
                GetCaretPos(out temp);
                SetCaretPos(targetCaretPos.X, targetCaretPos.Y);
                targetCaretPos = temp;
            };
          
            Thread t = new Thread(() =>
            {
                Point current = targetCaretPos;
                while (true)
                {
                    if (current != targetCaretPos)
                    {
                       
                        if (Math.Abs(current.X - targetCaretPos.X) + Math.Abs(current.Y - targetCaretPos.Y) > 30)
                            current = targetCaretPos; 
                        else
                        {
                            current.X += Math.Sign(targetCaretPos.X - current.X);
                            current.Y += Math.Sign(targetCaretPos.Y - current.Y);
                        }

                      
                        richTextBox1.Invoke((Action)(() => SetCaretPos(current.X, current.Y)));
                    }                    
                    Thread.Sleep(20); // set speed effect slow or fast
                }
            });
            t.IsBackground = true; 
            t.Start();
        }
        
    }
}

Video demo ứng dụng smooth effect typing c#:



DOWNLOAD FULL SOURCE CODE

PASSWORD UNZIP: HUNG.PRO.VN
Chúc các bạn thành công với thủ thuật trên.

on Thứ Năm, 16 tháng 11, 2023 | , | A comment?

[VB.NET] How to Blur Effect Acrylic, Mica, Tabbed Windows 11

Xin chào các bạn, bài viết hôm nay mình tiếp tục hướng dẫn các bạn tạo hiệu ứng Blur Effect Acrylic, Mica and Tabbed của Windows 11 trên Winform bằng ngồn ngữ VB.NET


[VB.NET] Hiệu ứng Acrylic, Mica, Tabbed Blur Effect trên Winform

Giao diện demo ứng dụng:

Ở màn hình này, các bạn có thể chọn giao diện Theme Dark/Light ở nút button.

Video demo ứng dụng Blur Effect VB.NET:

Đầu tiên các bạn tạo 1 class Pinvoke.vb:
Imports System.Runtime.InteropServices

Public Class PInvoke
    Public Class ParameterTypes
        <Flags>
        Public Enum DWMWINDOWATTRIBUTE
            DWMWA_USE_IMMERSIVE_DARK_MODE = 20
            DWMWA_SYSTEMBACKDROP_TYPE = 38
        End Enum

        <StructLayout(LayoutKind.Sequential)>
        Public Structure MARGINS
            Public cxLeftWidth As Integer
            Public cxRightWidth As Integer
            Public cyTopHeight As Integer
            Public cyBottomHeight As Integer
        End Structure
    End Class

    Public Class Methods
        <DllImport("DwmApi.dll")>
        Public Shared Function DwmExtendFrameIntoClientArea(ByVal hwnd As IntPtr, ByRef pMarInset As ParameterTypes.MARGINS) As Integer
        End Function

        <DllImport("dwmapi.dll")>
        Public Shared Function DwmSetWindowAttribute(ByVal hwnd As IntPtr, ByVal dwAttribute As ParameterTypes.DWMWINDOWATTRIBUTE, ByRef pvAttribute As Integer, ByVal cbAttribute As Integer) As Integer

        End Function

        Public Shared Function ExtendFrame(ByVal hwnd As IntPtr, ByVal margins As ParameterTypes.MARGINS) As Integer
            Return DwmExtendFrameIntoClientArea(hwnd, margins)
        End Function

        Public Shared Function SetWindowAttribute(ByVal hwnd As IntPtr, ByVal attribute As ParameterTypes.DWMWINDOWATTRIBUTE, ByVal parameter As Integer) As Integer
            Return DwmSetWindowAttribute(hwnd, attribute, parameter, Marshal.SizeOf(Of Integer)())
        End Function
    End Class
End Class

Và tiếp theo là source code cho Form1.vb.
Imports System.Net
Imports System.Windows.Interop
Imports AcrylicBlurWindows11.PInvoke.ParameterTypes
Imports AcrylicBlurWindows11.PInvoke.Methods

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim bounds As MARGINS = New MARGINS
        Dim hwnd As IntPtr = Handle
        With bounds
            .cxLeftWidth = 0
            .cxRightWidth = 0
            .cyTopHeight = Me.Height - 105 'Screen.PrimaryScreen.Bounds.Height - 60
            .cyBottomHeight = 0
        End With


        Dim result As Integer = DwmExtendFrameIntoClientArea(hwnd, bounds)
        Me.BackColor = Color.Black

        Dim Panel As New Panel
        With Panel
            .Size = New Size(Me.Width, Me.Height - 60)
            .Location = New Point(0, 0)
            .Anchor = AnchorStyles.Left Or AnchorStyles.Right Or AnchorStyles.Top Or AnchorStyles.Bottom
            .BackColor = Color.FromKnownColor(KnownColor.Control)
        End With
        'Panel.Dock = DockStyle.Fill
        ' Me.Controls.Add(Panel)
    End Sub

    Private Sub rdoArcylic_CheckedChanged(sender As Object, e As EventArgs) Handles rdoArcylic.CheckedChanged
        If rdoArcylic.Checked Then
            SetWindowAttribute(Me.Handle, DWMWINDOWATTRIBUTE.DWMWA_SYSTEMBACKDROP_TYPE, 3)
        End If
    End Sub

    Private Sub rdoMica_CheckedChanged(sender As Object, e As EventArgs) Handles rdoMica.CheckedChanged
        If rdoMica.Checked Then
            SetWindowAttribute(Me.Handle, DWMWINDOWATTRIBUTE.DWMWA_SYSTEMBACKDROP_TYPE, 2)
        End If
    End Sub

    Private Sub rdoTabbed_CheckedChanged(sender As Object, e As EventArgs) Handles rdoTabbed.CheckedChanged
        If rdoTabbed.Checked Then
            SetWindowAttribute(Me.Handle, DWMWINDOWATTRIBUTE.DWMWA_SYSTEMBACKDROP_TYPE, 4)
        End If
    End Sub

    Private Sub rdoNone_CheckedChanged(sender As Object, e As EventArgs) Handles rdoNone.CheckedChanged
        If rdoNone.Checked Then
            SetWindowAttribute(Me.Handle, DWMWINDOWATTRIBUTE.DWMWA_SYSTEMBACKDROP_TYPE, 1)
        End If
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If Button1.Tag.ToString() = "0" Then
            SetWindowAttribute(
            Me.Handle,
             DWMWINDOWATTRIBUTE.DWMWA_USE_IMMERSIVE_DARK_MODE,
             1)
            Button1.Tag = "1"
            Button1.Text = "Light"
        Else
            SetWindowAttribute(
           Me.Handle,
            DWMWINDOWATTRIBUTE.DWMWA_USE_IMMERSIVE_DARK_MODE,
            0)
            Button1.Tag = "0"
            Button1.Text = "Dark"
        End If

    End Sub
End Class

Qua những bước trên các bạn cũng biết cách thực hiển rồi chứ. Mọi người áp dụng vào để làm cho mình một chương trình phát nhạc hoàn chỉnh nhé.

Chúc mọi người thành công với thủ thuật trên.


DOWNLOAD SOURCE CODE

PASSWORD UNZIP: HUNG.PRO.VN

on Thứ Ba, 7 tháng 11, 2023 | , | A comment?

[UPDATE] PROGRAMMER POSTED HUNG.PRO.VN

Cùng như những chương trình trước và không có gì thay đổi ở phiên bản này, mình chỉ thay đổi logo và những thứ phụ để tối ưu tốt nhất cho mọi người sũ dụng internet hiện tại.

Vì thời đại công nghệ đi lên nên mình cũng có chút động lực để phát triển chương trình đăng bài này riêng cho blog hung.pro.vn. Và các bạn cũng biết đấy, nếu mọi người sữ dụng blog thì khó có thể chia sẽ nội dung lên blog đó như những website hiện tại.

[UPDATE] PROGRAMMER POSTED HUNG.PRO.VN

Hi mọi người, sau một thời gian phát triển blog hung.pro.vn và mình cũng đã phát hành lại chương trình đăng bài cho mọi người cùng nhau sữ dụng nhé.

Vì blogger là mã nguồn mỡ mà chỉ có người quản trị mới có quyền đăng bài lên blog. Và mọi người có thể đăng được bài lên được nếu quản trị blog đó setup email của các bạn vào blog đó thì mới có thêm tác giả viết bài cho blog. Và cũng đã lâu khi mình biết một trang blog cũng có viết chương trình website để người dùng có thể đăng bài lên blog miễn phí nhưng lại bị kiểm soát chứ không phải các bạn đăng bài lên blog là hiển thị ngay như chương trình mà mình phát triển. Và blog đó sẽ xét duyệt bài đăng từ quản trị blog.

Qua bài viết này mình cũng muốn chia sẽ cho mọi người một chương trình đăng bài lên blog hoàn toàn miễn phí này, và một số lưu ý khi mọi người đăng bài lên blog mình nhé.

MỌI NGƯỜI KHÔNG ĐĂNG BÀI CHIA SẼ VIỆC GIẾT, HAY CHẾT CHÓC, VÀ KHÔNG 18+...V.V

Các bạn có thể tải chương trình tại địa chỉ :

DOWNLOAD TOOLS POSTED BLOG


Và các bạn có thể quét chương trình diệt virus thoải mái nhé, mình cam đoan răng chương trình này hoàn toàn sạch sẽ và không có một tì vết gì với người dùng windows nhé. Nếu mình có gắn gì vào thì mình không còn lại một thằng coder tốt nữa nhé.

Cảm ơn mọi người đã quan tâm.
Chúc các bạn thành công và thương xuyên ghé thắm blog hung.pro.vn để mình có thêm động lực để phát triển chương trình thật tốt nhé. :D
PASSWORD DEFAULT: HUNG.PRO.VN OR hung.pro.vn
Thời gian : 11/5/2023 12:45:59 PM

on Thứ Bảy, 4 tháng 11, 2023 | , , , , | A comment?

[DEVEXPRESS] Download Vsix WinForms UI Templates — Early Access Preview (EAP)

Xin chào các bạn, bài viết hôm nay mình chia sẻ các bạn tool Winform UI Templates - Early Access Preview (EAP) của Devexpress

 

[DEVEXPRESS] Chia sẻ tool Winform UI Templates Early Access Preview (EAP)

Phiên bản hiện tại là EAP vsix 23.1, như mình test thử thì nó chỉ support ngôn ngữ C# thì phải, mình có tạo project vb.net nhưng không thể tạo template được.

VIDEO DEMO VÀ SỮ DỤNG

Với công cụ này, Devexpress cung cấp sẵn cho các bạn template, các bạn chỉ cần mở lên và tải nó vào project để sử dụng.

Dưới đây, là form mẫu Card ngân hàng của Devexpress sẵn, các bạn chỉ cần tải và chỉnh sửa lại theo ý của mình.

CHI TIẾT CÁC TEMPLATE:


Sau khi các bạn cài đặt vào sẽ xuất hiện thêm các component ở thanh toolbox.

DOWNLOAD VSIX WINFORM UI TEMPLATES

Chúc mọi người thành công với thủ thuật này.